python - python中的立方体根在shell中不同
问题描述
我注意到当我运行这个程序时:
from random import *
z=random()*-1
print(z)
print(z**(1/3))
它返回一个复杂的值。例如,有一次它的输出是
-0.08310434620988971
(0.21819489400101133+0.37792464236185713j)
但是,如果我在 shell 中运行等效命令,它会返回正确答案:
我已经多次重复这个实验,结果都是一样的。有人知道这是为什么吗?
解决方案
求幂的符号优先级更高。虽然-0.08310434620988971**(1/3)
实际上是
-(0.08310434620988971**(1/3))
z**(1/3)
计算
(-0.08310434620988971)**(1/3)
在第二个示例z
中已经是一个负数,因此该上下文中的结果是正确的。