Mathematica has the ContinuedFraction[]
function to give the continued fraction expansion of a rational (or approximation of a real) number. I'm interested in the inverse: is there an efficient way to give an array as a continued fraction expansion and have Mathematica calculate the number it represents?
1 Answer
As Heike mentions in the comments, FromContinuedFraction[]
does what you want:
FromContinuedFraction[{2, 2, 1, 7, 1, 2, 2, 16}]
6784/2891
If FromContinuedFraction[]
had not been built-in, however, something like this could be done:
(* backward recursion *)
Fold[#2 + 1/#1 &, Infinity, Reverse[{2, 2, 1, 7, 1, 2, 2, 16}]]
6784/2891
or even
(* forward recursion, matrix multiplication form *)
Divide @@ Last[Fold[{{0, 1}, {1, #2}}.#1 &, {{0, 1}, {1, 0}}, {2, 2, 1, 7, 1, 2, 2, 16}]]
or equivalently
Divide @@ First[Fold[{{#2, 1}, {1, 0}}.#1 &, IdentityMatrix[2], {2, 2, 1, 7, 1, 2, 2, 16}]]
Still another alternative is
(* Lentz-Thompson-Barnett recursion *)
1/(Times @@ Flatten[Rest[FoldList[{#2 + 1/#1[[1]], 1/(#2 + #1[[2]])} &, {1, 0},
{2, 2, 1, 7, 1, 2, 2, 16}]]] - 1)
FromContinuedFraction
$\endgroup$ContinuedFraction
ref page would have given you links toFromContinuedFraction
and the overview page "Continued Fractions & Rational Approximations". The tutorial, also mentioned on the same page, contains a discussion ofFromContinuedFraction
as well. $\endgroup$