2016-10-25 28 views
2

我想在python 2.7中編寫一個程序,它將首先查看數字是否平均分配另一個數字,如果它確實得到除法結果。我犯了錯誤,將大數分開

但是,當我使用大量數據時,我得到了一些有趣的結果。

目前我使用:

from __future__ import division 
import math 
a=82348972389472433334783 
b=2 
if a/b==math.trunc(a/b): 
    answer=a/b 
    print 'True' #to quickly see if the if loop was invoked 

當我運行此我得到:

True 

但82348972389472433334783顯然是不連。

任何幫助,將不勝感激。

+0

你不是想檢查a的模數除以2嗎?如果是%2:',我建議將'if'改爲''。如果'a'是偶數,這會給你'0',如果'a'是奇數則給你'1'。因爲我相信你實際上在做的是比較'a/b'是否等於'a/b'(你除了整數,所以'trunc'沒有效果,對吧?) – BorrajaX

+4

除法結果是一個浮點數數。你只是問「[是浮點數學破?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)」 –

+0

@ user2357112除*的結果是一個浮點數,因爲來自__未來_進口部門'。 – jme

回答

5

這是一個瘋狂的方式來做到這一點。只需使用餘數運算符。

if a % b == 0: 
    # then b divides a evenly 
    quotient = a // b 
+0

這會讓我知道它是否平均分配,但我怎麼知道確切的結果會是什麼?我需要知道確切的劃分,如果它在我的代碼中可以平均分配的話。 – Dan

+3

如果用「瘋狂」來表示「錯誤」。 –

+0

添加了商的代碼 – wim

0

爲什麼不使用模運算符來檢查數字是否可以均勻分配?

N%X == 0

1

真正分裂隱式轉換輸入到浮體不提供精確到存儲a值準確。例如。在我的機器上

>>> int(1E15+1) 
1000000000000001 
>>> int(1E16+1) 
10000000000000000 

因此,你鬆散的精度。類似的事情發生在你的大數字上(比較int(float(a))-a)。
現在,如果你檢查你的部門,你看到的結果「是」居然發現是整數

>>> (a/b).is_integer() 
True 

這又是不是真的事先預料到。

的math.trunc功能做(從docs)類似的東西: 返回真實值X截斷爲積分(通常是一個長整型)。

蟒的鴨打字性質允許長整數和浮點數的比較,參見 Checking if float is equivalent to an integer value in pythonComparing a float and an int in Python

相關問題