Python分数类型未正确简化
据我所知,Python分数类型输出您放入其中的任何内容的简化版本(即print(分数(4/8))输出1/2)。但是,对于某些输入,我得到的结果非常奇怪: 分数(984/1920)应输出41/80,但给出 2308094809027379/4503599627370496 分数(1000/992)应输出125/124,但给出4539918979204129/4503599627370496 分数(408/896)应输出51/112,但给出的是820298503567689/18014398509481984Python分数类型未正确简化,python,debugging,types,fractions,Python,Debugging,Types,Fractions,据我所知,Python分数类型输出您放入其中的任何内容的简化版本(即print(分数(4/8))输出1/2)。但是,对于某些输入,我得到的结果非常奇怪: 分数(984/1920)应输出41/80,但给出 2308094809027379/4503599627370496 分数(1000/992)应输出125/124,但给出4539918979204129/4503599627370496 分数(408/896)应输出51/112,但给出的是820298503567689/180143985094
当我将正确简化的分数输入到分数类型中时,我得到了相同的错误表示——甚至是相同的大量值。还有更多的例子说明了这一点。你知道为什么会这样吗?我能做些什么来补救吗?用逗号分隔分子和分母:
>>> Fraction(984/1920)
Fraction(2308094809027379, 4503599627370496)
>>> Fraction(984, 1920)
Fraction(41, 80)
>>> 984 / 1920
0.5125
>>> (0.5125).as_integer_ratio()
(2308094809027379, 4503599627370496)
使用/
意味着二进制浮点除法首先发生,然后再将输入传递给分数。因此,所显示的分数用于二进制浮点数,在将其四舍五入为分子精度为53位,分母精度为2次方的分数后:
>>> Fraction(984/1920)
Fraction(2308094809027379, 4503599627370496)
>>> Fraction(984, 1920)
Fraction(41, 80)
>>> 984 / 1920
0.5125
>>> (0.5125).as_integer_ratio()
(2308094809027379, 4503599627370496)
通过将参数分离为分数,可以传递分子和分母的精确整数,然后可以使用最大公分母算法将其缩减为最低项