分数函数返回未减少的分数

Fraction function returning unreduced fraction

我正在尝试将数学表达式转换为约化分数。当使用分数模块中的分数函数时,我得到一个未减少的分数。

代码

from fractions import Fraction

print(Fraction(1 + 1/(2 + 1/2)))

returns 3152519739159347/2251799813685248 减少到 7/5.

我希望我的代码能够 return 减少的分数。

如果您想使用分数,您需要以精确的数学方式执行所有运算,而不仅仅是最后转换为 Fraction。这意味着不将 ints 除以 ints - 那会给你一个浮点数。

from fractions import Fraction as F

1 + F(1, 2 + F(1, 2))
# or, taking advantage of how int/Fraction gives a Fraction,
1 + 1/(2 + F(1, 2))

否则,您将失去浮点舍入的精度,并且您将无法使用 limit_denominator 等选项来猜测未舍入的结果可能是什么。

这是由于浮点运算不精确造成的。

虽然1 + 1/(2 + 1/2)确实应该减少到7/5(或1.4),但是小数1.4不能用浮点数[=16]精确表示=]

>>> '{:030f}'.format(1.4)
1.39999999999999999999911182158029987

这种不准确导致它产生与 7/5

不同的分数

如果你想要精确的分数数学,你需要使用分数来计算整个方程,而不是将它与浮点数混合。