2017-05-28 48 views
-1

我有一個代碼看起來像這樣:精確比較浮點變量?

for i in range (1, 256): 
    if ((((i-1) * (1/float(256))) <= proba) and (proba <= (i * (1/float(256))))): 
     problist[i] += 1 

proba隨着爲0和1(主要是0.625或0.5)之間的浮動。 我想將之前計算的proba添加到特定間隔。問題是python似乎由於舍入錯誤而將一個值分配給多個區間。

是否有另一種方法比較這兩個浮點數更精確?

+0

顯示實際失敗的例子嗎? –

+0

你想要達到什麼目的?什麼'proba'是? –

+0

proba是我從另一個函數獲得的概率值。我計算了這個概率大約16.000倍,每個可適用性應該分配給一個特定的間隔。 – Kuroskai

回答

0

與舍入錯誤無關。沒有任何。但是如果你有間隔[0.49609375,0.5]和[0.5,0.50390625],那麼他們都是0.5。改爲使用半開間隔,即將其中一個<=更改爲<

順便說一下,它會更簡單和更快速簡單地通過相乘計算區間數256

problist[min(int(proba * 256) + 1, 256)] += 1 
+0

改變運營商沒有幫助。 intervalls相當獨特與1/256精度:/ 但計算選項似乎是有幫助的。你能解釋一下它做了什麼以及它是如何工作的? – Kuroskai

+0

@Kuroskai如果修復操作員沒有幫助,那麼你做錯了。請舉例說明它仍然出錯的例子。 「獨特」是什麼意思? –