2017-03-09 62 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) 

通過分離參數分數,您傳遞的是分子和分母的精確整數,然後可以使用最大公分母算法將其降至最低項。