How to find cube root using Python? [duplicate]
You could use x ** (1. / 3)
to compute the (floating-point) cube root of x
.
The slight subtlety here is that this works differently for negative numbers in Python 2 and 3. The following code, however, handles that:
def is_perfect_cube(x): x = abs(x) return int(round(x ** (1. / 3))) ** 3 == xprint(is_perfect_cube(63))print(is_perfect_cube(64))print(is_perfect_cube(65))print(is_perfect_cube(-63))print(is_perfect_cube(-64))print(is_perfect_cube(-65))print(is_perfect_cube(2146689000)) # no other currently posted solution # handles this correctly
This takes the cube root of x
, rounds it to the nearest integer, raises to the third power, and finally checks whether the result equals x
.
The reason to take the absolute value is to make the code work correctly for negative numbers across Python versions (Python 2 and 3 treat raising negative numbers to fractional powers differently).
The best way is to use simple math
>>> a = 8>>> a**(1./3.)2.0
EDIT
For Negative numbers
>>> a = -8>>> -(-a)**(1./3.)-2.0
Complete Program for all the requirements as specified
x = int(input("Enter an integer: "))if x>0: ans = x**(1./3.) if ans ** 3 != abs(x): print x, 'is not a perfect cube!'else: ans = -((-x)**(1./3.)) if ans ** 3 != -abs(x): print x, 'is not a perfect cube!'print 'Cube root of ' + str(x) + ' is ' + str(ans)
def cube(x): if 0<=x: return x**(1./3.) return -(-x)**(1./3.)print (cube(8))print (cube(-8))
Here is the full answer for both negative and positive numbers.
>>> 2.0-2.0>>>
Or here is a one-liner;
root_cube = lambda x: x**(1./3.) if 0<=x else -(-x)**(1./3.)