Flareget является лучшим и самым быстрым загрузчиком. Это - альтернативная опция Of IDM for Ubuntu.
Вы можете использовать:
-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
Простого использования формулы Де Муавра достаточно, чтобы показать, что кубический корень значения, независимо от знака, является многозначной функцией. Это означает, что для любого входного значения будет три решения. Большинство представленных решений возвращают только основной корень. Решение, которое возвращает все допустимые корни и явно проверяет несложные особые случаи, показано ниже.
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 ]
Вы можете получить полное (все n корней) и более общее (любой знак, любая степень) решение, используя:
import cmath
x, t = -3., 3 # x**(1/t)
a = cmath.exp((1./t)*cmath.log(x))
p = cmath.exp(1j*2*cmath.pi*(1./t))
r = [a*(p**i) for i in range(t)]
Explanation: a использует уравнение x u = exp (u * log (x)). Это решение будет тогда одним из корней, и чтобы получить остальные, поверните его в комплексной плоскости на (полный оборот) / t.
Взять предыдущие ответы и превратить их в однострочник:
import math
def cubic_root(x):
return math.copysign(math.pow(abs(x), 1.0/3.0), x)
Кубический корень отрицательного числа - это просто отрицательное значение кубического корня абсолютного значения этого числа.
, т.е. x ^ (1/3) для x <0 совпадает с (-1) * (| x |) ^ (1/3)
Просто сделайте ваше число положительным, а затем вычислите кубический корень.
Вы также можете оберните библиотеку libm
, которая предлагает функцию cbrt
(корень куба):
from ctypes import *
libm = cdll.LoadLibrary('libm.so.6')
libm.cbrt.restype = c_double
libm.cbrt.argtypes = [c_double]
libm.cbrt(-8.0)
дает ожидаемое
-2.0
Примитивное решение:
def cubic_root(nr):
if nr<0:
return -math.pow(-nr, float(1)/3)
else:
return math.pow(nr, float(1)/3)
Вероятно, в основном непифонический, но он должен работать.