2016-09-22 110 views
-1

我在Python 3中有兩個float值(「a」和「b」),每個float值可以有5到15個小數點。問題是,當兩個值對我來說相等時,python會給我一個False。哪個是比較python中兩個float值最快的方法?

Examples: 
a=12.091824733909107, b=12.091824733909117 
or also 
a=12.54678, b=12.546780000

對於我在上面的例子中,「a」和「b」是相等的。一種解決方法是使用round(a,5)和round(b,5)來削減小數點,但是使用round()數百萬次增加時間過程。是否有另一種解決方案不需要使用round()?

+0

這是因爲兩個值不是**相等。 – Dawny33

+0

當你使用時會發生什麼;如果a-b = 0:返回true; elif a-b!= 0:返回false; – Roy123

+0

@Roy_Dorsthorst使a-b不能解決問題,因爲例如python會從差異0.000000001中識別出來。此外,我認爲比兩個值更快,比作出差異和比較結果0 – lausent

回答

0

您需要設置一個公差範圍,例如,如果A和B之間的區別是波紋管他們被認爲等於

>>> def is_close(a, b, tol=1e-9): 
     return abs(a-b) <= tol 

>>> is_close(12.091824733909107, 12.091824733909117) 
True 
>>> is_close(12.54678, 12.5467800000123) 
True 
>>> 

或在Python 3.5+

>>> import math 
>>> math.isclose(12.091824733909107, 12.091824733909117) 
True 
>>> math.isclose(12.54678, 12.5467800000123) 
True 
>>> 
+0

我在python 3.4和3.5中做了一些測試,似乎使用「%.xf」%a和「%.xf」%b是最快的解決方案(x等於7)。它也比math.isclose更快(少了幾秒)。 – lausent

相關問題