2017-03-09 28 views
1

Python分数类型,据我所知,输出你放入其中的任何简化版本(即print(Fraction(4/8))打印出1/2)。但是,对于某些输入,我变得非常怪异的结果:Python分数类型不能简化

分数(一千九百二十〇分之九百八十四)应输出41/80,而是给人 4503599627370496分之2308094809027379。

馏分(1000/992)应该输出125/124,而是给出4539918979204129/4503599627370496。

馏分(408/896)应该输出51/112,而是给出8202985035567689/18014398509481984。

当我将正确简化的分数输入分数类型时,我会得到相同的越野车表示 - 相同的大量值,甚至。这些来自更多的例子。有关为什么会出现这种情况的任何想法,以及我能做些什么来补救它?

回答

3

使用逗号分隔的分子和分母:

>>> Fraction(984/1920) 
Fraction(2308094809027379, 4503599627370496) 
>>> Fraction(984, 1920) 
Fraction(41, 80) 

使用/意味着该二进制浮点数除法发生第一,之前输入被传递到分数。所以,所显示的分数为二进制浮点数它已经被舍入到一小部分与精密在分子53位和供分母通电的两后:

>>> 984/1920 
0.5125 
>>> (0.5125).as_integer_ratio() 
(2308094809027379, 4503599627370496) 

通过分离参数分数,您传递的是分子和分母的精确整数,然后可以使用最大公分母算法将其降至最低项。