<p>连续分数是很强大的。也许这是一个小的过度,但它的工作。你知道吗</p>
<pre><code>import numpy as np
def get_cont_fraction(x, depth=0, maxdepth=10, precision=1e-6):
if depth > maxdepth:
out = []
else:
assert x >= 0
out=[]
if not depth:
out += [ int(x) ] + get_cont_fraction( x - int( x ), depth=depth + 1, maxdepth=maxdepth, precision=precision)
elif x < precision :
out=[]
else:
out += [ int(1./ x) ] + get_cont_fraction(1. / x - int( 1. / x ), depth=depth + 1, maxdepth=maxdepth, precision=precision)
return out
def get_fraction(inList):
num = inList[-1]
den = 1
testList = inList[:-1:]
testList = testList[::-1]
for a in testList:
num , den = a * num + den, num
return ( num, den )
if __name__ == "__main__":
a = get_fraction( get_cont_fraction( 1.5999999991220535 ) )
print a
print a[0]*1./a[1]
a = get_fraction( get_cont_fraction( 1.2799999997163347 ) )
print a
print a[0]*1./a[1]
</code></pre>
<p>给予:</p>
<pre><code>>> (8, 5)
>> 1.6
>> (32, 25)
>> 1.28
</code></pre>