为何Python中使用数值与变量进行幂运算结果不同?
Python负浮点数幂运算的差异问题解答
为什么两个输出结果不同?
第一个表达式-0.8**-0.8的计算逻辑
Python中运算符优先级里,**(幂运算)的优先级高于一元负号-,所以这个表达式实际执行的是:
-(0.8 ** -0.8)
先计算正数0.8的-0.8次幂(即1/(0.8**0.8)),再对结果取负,最终得到实数结果。
第二个表达式Num**Num的计算逻辑
当Num = -0.8时,表达式等价于(-0.8)**(-0.8)。从数学定义来看,负数的非整数次幂需要在复数域中求解:
根据指数与对数的转换公式 a^b = e^(b * ln(a)),负数的自然对数ln(-0.8)会包含虚部(ln(-x) = ln(x) + iπ),代入计算后结果自然是复数。
如何用变量得到第一个输出的结果?
你尝试的-(Num)**Num无效,是因为运算符优先级仍然是先计算Num**Num(得到复数),再取负,结果还是复数。正确的写法是先对底数取绝对值,计算正数的幂后再取负,模拟第一个表达式的运算逻辑:
Num = -0.8 print(-(abs(Num) ** Num))
这样就会得到和-0.8**-0.8一致的实数结果:-1.1954406247375462。
内容的提问来源于stack exchange,提问作者pen art
相关产品推荐
相关产品推荐

