// See http://mathworld.wolfram.com/ContinuedFraction.html continuedFraction[x, limit] := { r = x result = new array count = 0 while (r != 0) and count < limit { a = floor[r] result.push[a] denom = r -a if denom == 0 break r = 1 / (r - a) count = count + 1 } return result } continuedFractionToFraction[cf] := { len = length[cf] results = new array frac = 0 for i = len-1 to 1 step -1 { if (frac == 0) frac = 1/(cf@i) else frac = 1/(cf@i+frac) } return cf@0 + frac } // Turns an array representing a continued fraction back into an array // of fractions. Each fraction in the array shows the results of using more // and more terms from the continued fraction representation. continuedFractionToArray[cf] := { len = length[cf] results = new array for seqlen = 0 to len-1 { frac = 0 for i = seqlen to 1 step -1 { if (frac == 0) frac = 1/(cf@i) else frac = 1/(cf@i+frac) } results.push[frac+cf@0] } return results }