D 负实数的幂运算

D 负实数的幂运算,d,exponentiation,real-datatype,D,Exponentiation,Real Datatype,有人能解释一下为什么我在第一种情况下得到积极的结果,在第二种情况下得到消极的结果 auto r1=-3.0升; 自动r2=2.0升; writeln(typeid(r1));//真实的 writeln(typeid(r2));//真实的 writeln(typeid(r1^^r2));//真实的 writeln(r1^^r2);//9 writeln(typeid(-3.0L));//真实的 writeln(类型ID(2.0L));//真实的 writeln(typeid(-3.0L^^2.0L

有人能解释一下为什么我在第一种情况下得到积极的结果,在第二种情况下得到消极的结果

auto r1=-3.0升;
自动r2=2.0升;
writeln(typeid(r1));//真实的
writeln(typeid(r2));//真实的
writeln(typeid(r1^^r2));//真实的
writeln(r1^^r2);//9
writeln(typeid(-3.0L));//真实的
writeln(类型ID(2.0L));//真实的
writeln(typeid(-3.0L^^2.0L));//真实的
写入(-3.0升^2.0升);//-9

免责声明:我不知道D。这是我用其他语言写的背景

当你平方一个负数(实数)时,这个数变成正数。您正在编写模棱两可的(对人类)表达式:

-3^2
这可能意味着:

  • -(3^2)=-9
  • (-3)^2=9
从输出判断,我假设编程语言的运算符优先级是选择第一个。尝试将最后一行替换为:

writeln((-3.0L) ^^ 2.0L);  // -9

上面的消息来源没有错。即使很好,旧的FORTRAN也有最高优先级的幂运算符(参见示例)。因此,在几乎所有具有幂运算符的现代编程语言中,表达式
-3^2
的计算结果都是
-(3^2)


即使在数学表达式中,这个规则也是一样的:

我不是专家,但我认为负数加在指数之后。将-3.0升机油包入parenthesis@Cole你是说这是一个运算符优先级问题?正如我所说的,加入帕伦斯确实会有所不同。Idk。我认为这不是正确的答案,^^在D中是左联想的。我没有想到这一点。@fwend:这不是联想的结果。如果^^是正确的,您将得到相同的结果。这纯粹是一个优先权问题,事实上,这并不含糊。在数学和编程语言中,它都有明确的定义。@Joey就像所有运算符在表达式中组合时的情况一样,如果没有运算符优先级,它将是不明确的,但很自然,这就是运算符优先级存在的原因。它使表达式对编译器来说是明确的。然而,如果程序员不知道所涉及的运算符的优先级,显然仍然会让他们感到困惑。