Calculate the cube root of a number
Haskell - 35
c n=(iterate(\x->(x+n/x/x)/2)n)!!99
Example runs:
c 27 => 3.0
c 64 => 4.0
c 1 => 1.0
c 18.609625 => 2.6500000000000004 # only first 4 digits are important, right?
c 3652264 => 154.0
c 0.001 => 0.1
c 7 => 1.9129311827723892
c (-27) => -3.0
c (-64) => -4.0
Moreover, if you import Data.Complex
, it even works on complex numbers, it returns one of the roots of the number (there are 3):
c (18:+26) => 3.0 :+ 1.0
The :+
operator should be read as 'plus i times'
SageMath, (69) 62 bytes
However, don't ever believe it will give you the result, it's very difficult to go randomly through all the numbers:
def r(x):
y=0
while y*y*y-x:y=RR.random_element()
return "%.4f"%y
if you didn't insist on truncating:
def r(x):
y=0
while y*y*y-x:y=RR.random_element()
return y
SageMath, 12 bytes, if exp
is allowed
Works for all stuff: positive, negative, zero, complex, ...
exp(ln(x)/3)
J: 16 characters
Loose translation of the Haskell answer:
-:@((%*~)+])^:_~
Test cases:
-:@((%*~)+])^:_~27
3
-:@((%*~)+])^:_~64
4
-:@((%*~)+])^:_~1
1
-:@((%*~)+])^:_~18.609625
2.65
-:@((%*~)+])^:_~3652264
154
-:@((%*~)+])^:_~0.001
0.1
-:@((%*~)+])^:_~7
1.91293
It works like this:
(-:@((% *~) + ])^:_)~ 27
↔ 27 (-:@((% *~) + ])^:_) 27
↔ 27 (-:@((% *~) + ])^:_) 27 (-:@((% *~) + ])) 27
↔ 27 (-:@((% *~) + ])^:_) -: ((27 % 27 * 27) + 27)
↔ 27 (-:@((% *~) + ])^:_) 13.5185
↔ 27 (-:@((% *~) + ])^:_) 27 (-:@((% *~) + ])) 13.5185
↔ 27 (-:@((% *~) + ])^:_) -: ((27 % 13.5185 * 13.5185) + 13.5185)
↔ 27 (-:@((% *~) + ])^:_) 6.83313
...
In words:
half =. -:
of =. @
divideBy =. %
times =. *
add =. +
right =. ]
iterate =. ^:
infinite =. _
fixpoint =. iterate infinite
by_self =. ~
-:@((%*~)+])^:_~ ↔ half of ((divideBy times by_self) add right) fixpoint by_self
Not one of the best wordy translations, since there's a dyadic fork and a ~
right at the end.