limit_denominator(max_denominator=1000000)
Finds and returns the closest Fraction to self that has denominator at most max_denominator. This method is useful for finding rational approximations to a given floating-point number:
>>>
>>> from fractions import Fraction
>>> Fraction('3.1415926535897932').limit_denominator(1000)
Fraction(355,113)
它不应该像尝试/ 999,b / 998,c / 997 ..并找到最佳近似值.
解决方法
分数模块是用Python编写的,您只需查看源代码即可.它包含以下注释.
# Algorithm notes: For any real number x,define a *best upper
# approximation* to x to be a rational number p/q such that:
#
# (1) p/q >= x,and
# (2) if p/q > r/s >= x then s > q,for any rational r/s.
#
# Define *best lower approximation* similarly. Then it can be
# proved that a rational number is a best upper or lower
# approximation to x if,and only if,it is a convergent or
# semiconvergent of the (unique shortest) continued fraction
# associated to x.
#
# To find a best rational approximation with denominator <= M,# we find the best upper and lower approximations with
# denominator <= M and take whichever of these is closer to x.
# In the event of a tie,the bound with smaller denominator is
# chosen. If both denominators are equal (which can happen
# only when max_denominator == 1 and self is midway between
# two integers) the lower bound---i.e.,the floor of self,is
# taken.