3 ms·
Here's some simpler code that computes the same result -- I'm too tired and dumb to work out if it will for any number: def rationalizations(x): ""
by abecedarius 14y ago
Here's some simpler code that computes the same result -- I'm too tired and dumb to work out if it will for any number:
def rationalizations(x):
"""Generate good rational approximations of x in order of
increasing denominator."""
assert 0 <= x
ix = int(x)
yield ix, 1
if x != ix:
for numer, denom in rationalizations(1.0/(x-ix)):
yield denom + ix * numer, numer
import itertools, math
def show(x, n): return list(itertools.islice(rationalizations(x), n))
print show(math.pi, 11)
# [(3, 1), (22, 7), (333, 106), (355, 113), (103993, 33102),
# (104348, 33215), (208341, 66317), (312689, 99532),
# (833719, 265381), (1146408, 364913), (4272943, 1360120)]
From https://github.com/darius/sketchbook/blob/master/misc/rationalize.py https://github.com/darius/sketchbook/blob/master/misc/ration...
- drostie 14y agoIt's true, my code is longer because it computes an explicit continued fraction representation (and also because it's not written as two generator scripts).