2017-03-10 114 views
1

我在下面有一個大整數,就像'max'一樣。如何將最大值除以'27'不等於完全省略第一個數字'27'。從技術上講,它們應該是平等的,但是在Python中它們不是。在這個例子中,我怎樣才能通過將最大值除以'27'來得到相同的答案?如何在Python中使用大整數除法得到正確的精度

max = 27*37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44 
no27 = 37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44 
div27 = (max/27) 
modno27 = no27%40 
moddiv27 = div27%40 

打印的值是:

no27 = 35882855955274315680000000 
div27 = 3.5882855955274316e+25 
modno27 = 0 
moddiv27 = 8.0 

回答

6

假設這是Python 3中,您使用真分裂,其計算float結果,但float(基於C double)具有表示限制了Python int小號不要(高於〜2**53,它不能代表每個整數值)。

當你知道這個數字是可以被整除時,使用//來保存int -ness。如果它不是可以被整除的話,那麼你可以向下取整。 5 // 3 == 1。如果這是不可接受的,您可以使用divmod同時計算商和餘數(因此不會丟失任何信息)或fractions.Fraction類型或decimal.Decimal類型(具有適當的精度),以便在單一結果類型中獲得更精確的結果。

+0

謝謝,這很有道理。感謝您對發生的事情進行徹底的解釋。 – user1179317