Continued fraction
A number may be represented as a continued fraction (see http://mathworld.wolfram.com/ContinuedFraction.html) as follows:
The task is to write a program which generates such a number and prints a real representation of it. The code should be tested by calculating and printing the square root of 2, Napier's Constant, and Pi.
For the square root of 2, is always . is then is .
For Napier's Constant, is , then is . is then is .
For Pi, is 3 then is always . is .
Python
<lang python># The continued Fraction def CF(a, b, t):
if 0 < t: a1 = next(a) b1 = next(b) z = CF(a, b, t-1) return (a1*z[0] + b1*z[1], z[0]) return (1,1)
- Convert the continued fraction to a string
def pRes(cf, d):
res = str(cf[0] // cf[1]) res += "." x = cf[0] % cf[1] while 0 < d: x *= 10 res += str(x // cf[1]) x = x % cf[1] d -= 1 return res
- Test the Continued Fraction for sqrt2
def sqrt2_a():
yield 1 while (True): yield 2
def sqrt2_b():
while (True): yield 1
cf = CF(sqrt2_a(), sqrt2_b(), 950) print(pRes(cf, 200))
- 1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147
- Test the Continued Fraction for Napier's Constant
def Napier_a():
yield 2 n = 1 while (True): yield n n += 1
def Napier_b():
n=1 yield n while (True): yield n n += 1
cf = CF(Napier_a(), Napier_b(), 950) print(pRes(cf, 200))
- 2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901
- Test the Continued Fraction for Pi
def Pi_a():
yield 3 while (True): yield 6
def Pi_b():
x = 1 while (True): yield x*x x += 2
cf = CF(Pi_a(), Pi_b(), 950) print(pRes(cf, 10))
- 3.1415926532</lang>