2017-05-28 53 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如果修复操作员没有帮助,那么你做错了。请举例说明它仍然出错的例子。 “独特”是什么意思? –