Integer roots: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: An earlier reversion reverted) |
(→{{header|Phix}}: now uses mpz_root() instead) |
||
Line 714: | Line 714: | ||
{{libheader|mpfr}} |
{{libheader|mpfr}} |
||
<lang Phix>include mpfr.e |
<lang Phix>include mpfr.e |
||
function integer_root(integer n, object |
function integer_root(integer n, object a) |
||
-- a must be integer or string |
|||
-- yields the nth root of A, adapted from https://en.wikipedia.org/wiki/Nth_root_algorithm |
|||
mpz res = mpz_init( |
mpz res = mpz_init() |
||
{} = mpz_root(res,mpz_init(a),n) |
|||
delta = mpz_init() |
|||
A = mpz_init(A) |
|||
while true do |
|||
mpz_set(x,A) |
|||
mpz_pow_ui(delta,res,n-1) |
|||
mpz_fdiv_q(x, x, delta) |
|||
mpz_sub(delta,x,res) |
|||
{} = mpz_fdiv_q_ui(delta, delta, n) |
|||
if mpz_cmp_si(delta,0)=0 then exit end if |
|||
mpz_add(res,res,delta) |
|||
end while |
|||
return mpz_get_str(res) |
return mpz_get_str(res) |
||
end function |
end function |
||
Line 743: | Line 732: | ||
3rd root of 8 = 2 |
3rd root of 8 = 2 |
||
3rd root of 9 = 2 |
3rd root of 9 = 2 |
||
First digits of the square root of 2: |
First digits of the square root of 2: 14142135623730950488...47107578486024636008 (2,001 digits) |
||
First digits of the cube root of 2: |
First digits of the cube root of 2: 12599210498948731647...22546828353183047061 (2,001 digits) |
||
</pre> |
</pre> |
||