Python 中的指数运算符 - 使用变量和使用直接值给出不同的结果

Exponential operator in Python - Giving different result with using variables and with using direct values

我们使用如下指数运算符为变量赋值:

>>> a = -1.5
>>> b = 0.44
>>> c = (a ** b)
>>> c
(0.22397855343551604+1.1741366953411416j)

如果我们在指数运算符中使用直接值,结果会不同:

>>> d = (-1.5 ** 0.44)
>>> d
-1.195308902228074

我们需要使用变量的第二个输出。

问题是 - 的优先级低于 **,所以表达式 -1.5 ** 0.44 实际上被解析为 -(1.5 ** 0.44).

要得到正确的结果,你应该写(-1.5) ** 0.44

>>> -1.5 ** 0.44
-1.195308902228074
>>> -(1.5 ** 0.44)
-1.195308902228074
>>> (-1.5) ** 0.44
(0.22397855343551604+1.1741366953411416j)

结果-1.195308902228074实际上在数学上是不正确的,但是如果你真的想要不正确的结果,那么你可以使用absmath.copysign:

>>> a = -1.5
>>> b = 0.44
>>> import math
>>> math.copysign(abs(a) ** b, a)
-1.195308902228074