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
我注意到当我 运行 这个程序时:
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