繁体   English   中英

python 中的立方体根在 shell 中不同

[英]Cube root in python different in shell

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

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

它返回一个复杂的值。 例如,有一次它的 output 是

-0.08310434620988971
(0.21819489400101133+0.37792464236185713j)

但是,如果我在 shell 中运行等效命令,它会返回正确答案: 在此处输入图像描述

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

求幂的符号优先级更高。 -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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM