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
实际上在数学上是不正确的,但是如果你真的想要不正确的结果,那么你可以使用abs
和 math.copysign
:
>>> a = -1.5
>>> b = 0.44
>>> import math
>>> math.copysign(abs(a) ** b, a)
-1.195308902228074
我们使用如下指数运算符为变量赋值:
>>> 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
实际上在数学上是不正确的,但是如果你真的想要不正确的结果,那么你可以使用abs
和 math.copysign
:
>>> a = -1.5
>>> b = 0.44
>>> import math
>>> math.copysign(abs(a) ** b, a)
-1.195308902228074