Continued fraction: Difference between revisions

Line 1,912:
 
=={{header|Julia}}==
{{works with|Julia|01.60}}
<syntaxhighlight lang="julia">function# _sqrt(a::Bool,julias n)lazy iterators allow evaluation on demand
if a
return n > 0 ? 2.0 : 1.0
else
return 1.0
end
end
 
using .Iterators, .MathConstants, Printf
function _napier(a::Bool, n)
if a
return n > 0 ? Float64(n) : 2.0
else
return n > 1 ? n - 1.0 : 1.0
end
end
 
function _pi(a::Bool, n)
if a
return n > 0 ? 6.0 : 3.0
else
return (2.0 * n - 1.0) ^ 2.0 # exponentiation operator
end
end
 
function calccf(f::Functiona, expansions::Integerb = repeated(1))
aa₀, ba = true, falsepeel(a)
m = BigInt[a₀ 1; r1 = 0.0]
coeffs = zip(a, b)
for i in expansions:-1:1
while !isapprox(m[1]/m[2], m[3]/m[4]; atol = 1e-9)
r = f(b, i) / (f(a, i) + r)
(aᵢ, bᵢ), coeffs = peel(coeffs)
end
m *= [aᵢ 1; bᵢ 0]
return f(a, 0) + r
end
m[1]/m[2]
end
 
for (k, v) in [
for (v, f) in (("√2", _sqrt), ("e", _napier), ("π", _pi))
:(√2) => cf(flatten((1, repeated(2)))),
@printf("%3s = %f\n", v, calc(f, 1000))
:(ℯ) => cf(flatten((2, countfrom())),
flatten((1, countfrom()))),
:(π) => cf(flatten((3, repeated(6))),
(k^2 for k ∈ countfrom(1, 2)))]
@printf( "%3s2s: =%.9f ≈ %f.9f\n", k v, calceval(f, 1000)k)
end</syntaxhighlight>
 
{{out}}
<pre> √2: 1.414213562 = 1.414214414213562
ℯ: 2.718281828 ≈ 2.718281828
e = 2.718282
π: 3.141592653 = 3.141593141592654</pre>
 
=={{header|Klong}}==
39

edits