Integer roots: Difference between revisions

→‎{{header|Phix}}: now uses mpz_root() instead
m (→‎{{header|Haskell}}: An earlier reversion reverted)
(→‎{{header|Phix}}: now uses mpz_root() instead)
Line 714:
{{libheader|mpfr}}
<lang Phix>include mpfr.e
 
function integer_root(integer n, object Aa)
-- 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(1),
x{} = 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)
end function
Line 743 ⟶ 732:
3rd root of 8 = 2
3rd root of 9 = 2
First digits of the square root of 2: 141421356237309504814142135623730950488...710757848602463600847107578486024636008 (20012,001 digits)
First digits of the cube root of 2: 125992104989487316412599210498948731647...254682835318304706122546828353183047061 (20012,001 digits)
</pre>
 
7,806

edits