python - python的fractions.limit_denominator是怎么实现的?

标签 python fractions

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)

它不应该像尝试 a/999、b/998、c/997.. 并找到最佳近似值那样。

最佳答案

fractions 模块是用 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.

关于python - python的fractions.limit_denominator是怎么实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437589/

相关文章:

python - 错误:serverlessrepo 0.1.8要求pyyaml〜= 3.12

java - 除以负分数的问题

c++ - 分数类增量运算符重载解释

java - 这个句子怎么读,它叫什么

python - 使用字符串操作或正则表达式排除非特定格式的抓取结果

python - 另一种移动 Canvas 对象的方法?

python - 从 Mixcloud 播放列表中提取 URL Python Selenium

python - 删除列表python中的多余方括号

java - 为什么我的 for 循环不会添加超过 1.0/10,000,000.0 的分数?

python - 在 Python 中使用分数