首页 > 解决方案 > Python中的指数运算符 - 使用变量和使用直接值给出不同的结果

问题描述

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

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

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

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

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

标签: pythonpython-3.xmathcomplex-numbers

解决方案


问题是它-的优先级低于**,因此表达式-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的结果,那么您可以使用and math.copysign

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

推荐阅读