Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3中获得负数的真实立方根?_Python_Python 3.x - Fatal编程技术网

如何在Python3中获得负数的真实立方根?

如何在Python3中获得负数的真实立方根?,python,python-3.x,Python,Python 3.x,Python 3.4似乎随机决定使用**运算符返回数字的实根还是复数根: >>> (863.719-2500) -1636.281 >>> -1636.281**(1/3) -11.783816270504108 >>> (863.719-2500)**(1/3) (5.891908135252055+10.205084243784958j) 是否有办法确保在多维数据集根生成时得到实根而不是复杂根?在第二种情况下,实际上首先计算

Python 3.4似乎随机决定使用
**
运算符返回数字的实根还是复数根:

>>> (863.719-2500)
-1636.281  
>>> -1636.281**(1/3)  
-11.783816270504108
>>> (863.719-2500)**(1/3)  
(5.891908135252055+10.205084243784958j)

是否有办法确保在多维数据集根生成时得到实根而不是复杂根?

在第二种情况下,实际上首先计算多维数据集根,然后应用减号,从而得到实根

也就是说,
-1636.281**(1/3)
变成了
-1636.281**(1/3)
。你也可以用类似的逻辑得到真正的立方根

但实际上,在python中,当进行负数的立方根运算时,总是会得到复数

>>> -1636.281**(1/3)  
-11.783816270504108
>>> (-1636.281)**(1/3)
(5.891908135252055+10.205084243784958j)
如果您想要实数,可以添加如下代码-

def cube(x):
    if x >= 0:
        return x**(1/3)
    elif x < 0:
        return -(abs(x)**(1/3))
def多维数据集(x):
如果x>=0:
返回x**(1/3)
elif x<0:
返回-(abs(x)**(1/3))

在幂运算符和一元运算符的非偶合序列中,运算符从右向左求值(这不限制操作数的求值顺序):
-1**2
产生
-1

那么你的表情呢

-1636.281**(1/3)
实际评估为

-(1636.281**(1/3))

在第一个示例中,运算顺序意味着取正1636.281的立方根,然后取结果的负数。这不是随机的,而是将
z**p
定义为
exp(p*log(z))
的结果,其中复对数有一个分支切割,将其虚部放在区间中(-π,π)。哦,这就解释了奇怪的行为。另外,代码可以改进,因为0**(1/3)是0,如果x>=0,你可以这样做:…否则:…我不理解关于
0
的评论,它已经返回
0
for
0