Continued fraction: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: Guards in place of an if then else.)
m (→‎{{header|Phix}}: simplify: use functions with multiple returns)
Line 2,051: Line 2,051:


=={{header|Phix}}==
=={{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_a(integer n) return iff(n=0?1:2) end function
function continued_fraction(integer f, steps=precision)
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 := b / (a + res)
end for
{a} = f(0)
return a + res
end function
function nap_a(integer n) return iff(n=0?2:n) end function
function sqr2(integer n) return {iff(n=0?1:2),1} end function
function nap_b(integer n) return iff(n=1?1:n-1) end function
function pi_a(integer n) return iff(n=0?3:6) end function
function nap(integer n) return {iff(n=0?2:n),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 pi(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,"Precision: %d\n", {precision})
printf(1,"Sqr(2): %.10g\n", {continued_fraction(precision, sqr2_a, sqr2_b)})
printf(1,"Sqr(2): %.10g\n", {continued_fraction(sqr2)})
printf(1,"Napier: %.10g\n", {continued_fraction(precision, nap_a, nap_b)})
printf(1,"Napier: %.10g\n", {continued_fraction(nap)})
printf(1,"Pi: %.10g\n", {continued_fraction(precision, pi_a, pi_b)})</lang>
printf(1,"Pi: %.10g\n", {continued_fraction(pi)})</lang>
{{Out}}
{{Out}}
<pre>
<pre>