用 Python 精确分数
python 199
原文标题 :Accurate Fractions with Python
我没有从以下代码中看到我期望的数学结果,我认为它应该产生谐波级数:
from fractions import Fraction
def sum_fracs(n):
if n == 1:
return 1
return 1/n + sum_fracs(n - 1)
for n in range(1, 6):
print(sum_fracs(n).as_integer_ratio())
for n in range(1, 6):
print(Fraction(sum_fracs(n)))
输出:
(1, 1)
(3, 2)
(8256599316845909, 4503599627370496)
(2345624805922133, 1125899906842624)
(1285402393645329, 562949953421312)
1
3/2
8256599316845909/4503599627370496
2345624805922133/1125899906842624
1285402393645329/562949953421312
两种方法都没有给出
1
3/2
11/6
25/12
137/60
正如我所希望的。我知道浮点数可能有舍入错误,但我希望这种基本的东西在 Python 中是可能的。
非常感谢任何帮助。
回复
我来回复-
mozway 评论
你跑
Fraction(x)
wherex
是一个float。太晚了,你已经失去了精度,所以你的分数的精度和浮点数一样好。在函数中使用
Fraction
:def sum_fracs(n): if n == 1: return 1 return Fraction(1, n) + sum_fracs(n - 1) for n in range(1, 6): print(sum_fracs(n).as_integer_ratio())
输出:
(1, 1) (3, 2) (11, 6) (25, 12) (137, 60)
注意。这在
fraction
文档中有明确说明请注意,由于二进制浮点的常见问题(请参阅浮点算术:问题和限制),Fraction(1.1) 的参数不完全等于 11/10,因此 Fraction(1.1) 不返回 Fraction(11) , 10) 正如人们所期望的那样。(但请参阅下面
limit_denominator()
方法的文档。)2年前