Jump to content

Continued fraction: Difference between revisions

m
→‎{{header|Phix}}: simplify: use functions with multiple returns
m (→‎{{header|Haskell}}: Guards in place of an if then else.)
m (→‎{{header|Phix}}: simplify: use functions with multiple returns)
Line 2,051:
 
=={{header|Phix}}==
<lang Phix>constant precision = 10000
{{trans|ALGOL_68}}
<lang Phix>function continued_fraction(integer steps, fa, fb)
atom res = 0
for n=steps to 1 by -1 do
res := fb(n) / (fa(n) + res)
end for
return fa(0) + res
end function
function sqr2_acontinued_fraction(integer n)f, return iff(nsteps=0?1:2precision) end function
atom a, b, res = 0
function sqr2_b(integer n) return 1 end function
for n=steps to 1 by -1 do
{a, b} = f(n)
res := fb(n)b / (fa(n)a + res)
end for
{a} = f(0)
return fa(0)a + res
end function
function nap_asqr2(integer n) return {iff(n=0?1:2:n),1} end function
function nap_b(integer n) return iff(n=1?1:n-1) end function
function pi_anap(integer n) return {iff(n=0?32:6n),iff(n=1?1:n-1)} end function
function pi_b(integer n) return iff(n=1?1:power(2*n-1,2)) end function
function sqr2_bpi(integer n) return {iff(n=0?3:6),power(2*n-1,2)} end function
constant precision = 10000
printf(1,"Precision: %d\n", {precision})
printf(1,"Sqr(2): %.10g\n", {continued_fraction(precision, sqr2_a, sqr2_bsqr2)})
printf(1,"Napier: %.10g\n", {continued_fraction(precision, nap_a, nap_bnap)})
printf(1,"Pi: %.10g\n", {continued_fraction(precision, pi_a, pi_bpi)})</lang>
{{Out}}
<pre>
7,813

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.