你如何处理浮点舍入问题?

时间:2010-05-03 06:12:43

标签: floating-point

看到this post about floating point errors on slashdot,我很好奇  存在其他类型的解决方案来处理这种浮点舍入误差。那么你最常学到的浮点错误是什么,你从中学到了什么?

编辑:我正在一个项目中工作,我们必须处理浮点计算,所以我希望得到一些答案,可以帮助我避免一些事情,避免它们成为问题。我将接受这样的答案,除了“将所有内容与epsilon进行比较”之外,它给了我最新的见解。

3 个答案:

答案 0 :(得分:2)

尽量避免添加不同数量的数字。例如,10^8+1==10^8在单精度算术中。你可以通过移动到双倍精度来解决这个问题,但随后10^8+1.00000001==10^8+1 ......分数会丢失。

如果进入某个线性代数的所有数字都有偏差,请先消除偏差。因此,给定1000001, 1000003.9, 1000002.5, …,在做任何事情之前减去一百万,然后在最后添加它。

要求一个非常大的小数字序列,先将较小的子序列求和,这样最后的数字不会过度舍入。

要乘以一个非常大的数字序列,请添加它们的对数以避免上溢或下溢。

答案 1 :(得分:1)

我学会了永远不要比较两个花车的平等性。相反,我总是试图说出我的逻辑,以便比较总是小于或大于条件。将浮点数与零进行比较尤其令人讨厌。

答案 2 :(得分:-1)

我不认为你真的要担心它,除非你处理非常小的数字和/或非常大的数字......如果这是一个问题,要么使用某种'十进制'类,要么选择一个更稳定的算法。

我认为这在过去并没有真正让我感到困惑,但当我的同伴发生这种情况时我感到非常兴奋,我确切地知道出了什么问题:D