27 lines
760 B
Text
27 lines
760 B
Text
with javascript_semantics
|
|
function pow_(atom x, integer e)
|
|
atom r = 1
|
|
for i=1 to e do
|
|
r *= x
|
|
end for
|
|
return r
|
|
end function
|
|
|
|
function nth_root(atom y, n)
|
|
atom eps = 1e-15, -- relative accuracy
|
|
x = 1
|
|
while 1 do
|
|
-- atom d = ( y / power(x,n-1) - x ) / n
|
|
atom d = ( y / pow_(x,n-1) - x ) / n
|
|
x += d
|
|
atom e = eps*x -- absolute accuracy
|
|
if d > -e and d < e then exit end if
|
|
end while
|
|
return x
|
|
end function
|
|
|
|
procedure test(sequence yn)
|
|
atom {y,n} = yn
|
|
printf(1,"nth_root(%d,%d) = %.10g, builtin = %.10g\n",{y,n,nth_root(y,n),power(y,1/n)})
|
|
end procedure
|
|
papply({{1024,10},{27,3},{2,2},{5642,125},{4913,3},{8,3},{16,2},{16,4},{125,3},{1000000000,3},{1000000000,9}},test)
|