Welcome, guest | Sign In | My Account | Store | Cart

Calculate the continous fraction from a fraction or decimal number

Python, 33 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33``` ```def fr2fc(a,b,t): "Return continuos fraction fc0 [a1,a2,a3,...at] from a fraction a/b" a=float(a);b=float(b);t0=0 fc0=[];c=(a/b);pe=int(c);pf=c-pe while (t0 < t): fc0.append(pe);t0+=1 c=1.0/pf;pe=int(c);pf=c-pe return fc0 def fc2dec(fc0): "Return a number from a continuos fraction fc0 [a1,a2,a3,...]" ff=list(fc0); ff.reverse() return reduce(lambda x,y: y+(1.0/x),ff) def fc2fr(fc0): "Return a fraction from a continuos fraction fc0 [a1,a2,a3,...]" fc3=list(fc0) a=fc3.pop() b=1 fc3.reverse() for k in fc3: a,b=k*a+b,a return [a,b] if __name__ == "__main__": f1= fr2fc(3.141516,1,10) print f1 for k in range(1,len(f1)+1): f2= fc2fr(f1[0:k]);print f1[0:k],f2 ,float(f2[0])/f2[1] print fc2dec(f1) ```

#### 2 comments

Robin Becker 9 years, 7 months ago

Slight error in the test the for loop should probably read

``````for k in range(1,len(f1)+1):
``````

I also think fc2fr could benefit (in speed) from being written like this

``````def fc2fr(fc0):
"Return a fraction from a continuos fraction fc0 [a1,a2,a3,...]"
fc3=list(fc0)
a=fc3.pop()
b=1
fc3.reverse()
for k in fc3:
a,b=k*a+b,a
return a,b
``````
juan (author) 9 years, 7 months ago

Robin thank you. Smart python vision. your comments are welcome.

 Created by juan on Fri, 19 Sep 2014 (MIT)