python 的立方根与 shell 的不同

Cube root in python different in shell

我注意到当我 运行 这个程序时:

from random import *
z=random()*-1
print(z)
print(z**(1/3))

它returns 一个复杂的值。例如,有一次它的输出是

-0.08310434620988971
(0.21819489400101133+0.37792464236185713j)

但是,如果我运行中的等价命令shell,它returns的正确答案是:

这个实验我重复了好几次,结果都是一样的。 有人知道这是为什么吗?

求幂有更高的符号优先级。而 -0.08310434620988971**(1/3) 实际上是

-(0.08310434620988971**(1/3))

z**(1/3) 计算

(-0.08310434620988971)**(1/3)

在第二个示例中 z 已经是一个负数,因此该上下文中的结果是正确的。

在 shell 中,您需要将负数换行。由于先例的顺序。

本质上 shell 认为您所做的是

取 0.08310434620988971 ** (1/3) 的结果,然后在其前面加上负数。因为 ** 的优先级高于 -。当它在 z 中分配时,您不需要这样做,因为那是一个术语。

你应该在 shell 中得到相同的结果

(-0.08310434620988971)**(1/3)
(0.21819489400101133+0.37792464236185713j)

您可以通过平方示例看到一个简单的示例。所有平方数都是正数。

-2**2
-4

(-2)**2
4

不将负数 2 包装成 2 的 2 次方,即 4,然后将负号应用于结果 -4