Python中负数的立方根
有人能帮我找个办法,用Python计算负数的立方根吗?
>>> math.pow(-3, float(1)/3)
nan
这样做不行。负数的立方根也是负数。有什么解决办法吗?
14 个回答
13
math.pow(abs(x),float(1)/3) * (1,-1)[x<0]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
20
一个简单使用德莫弗公式的例子,可以说明一个数的立方根不管是正数还是负数,都是一个多值函数。这意味着,对于任何输入的数值,都会有三个解。大多数之前提供的解法只返回主要的那个根。而下面的这个解法则会返回所有有效的根,并且特别处理一些非复杂的特殊情况。
import numpy
import math
def cuberoot( z ):
z = complex(z)
x = z.real
y = z.imag
mag = abs(z)
arg = math.atan2(y,x)
return [ mag**(1./3) * numpy.exp( 1j*(arg+2*n*math.pi)/3 ) for n in range(1,4) ]
补充:根据要求,在不依赖numpy的情况下,下面的代码也能实现相同的功能。
def cuberoot( z ):
z = complex(z)
x = z.real
y = z.imag
mag = abs(z)
arg = math.atan2(y,x)
resMag = mag**(1./3)
resArg = [ (arg+2*math.pi*n)/3. for n in range(1,4) ]
return [ resMag*(math.cos(a) + math.sin(a)*1j) for a in resArg ]
14
你可以使用:
-math.pow(3, float(1)/3)
或者更一般来说:
if x > 0:
return math.pow(x, float(1)/3)
elif x < 0:
return -math.pow(abs(x), float(1)/3)
else:
return 0