处理浮点错误的最佳方法是什么

What is the best way to deal with floating point errors?

本文关键字:最佳 方法 是什么 错误 处理      更新时间:2023-09-26

所以我有一个Javascript脚本,它在循环中添加小分数,可能会添加0.2到0.1。然后,这个值被馈送到另一个函数,但问题是,我需要0.3才能被精确地馈送,而不是0.300000000000000004。

确保数字正确准确的最简单方法是什么。需要注意的是,添加0.25+0.125等,简单地四舍五入到小数点后1位并不能解决这个问题。

也有可能添加0.2+0.10000000000000004,尽管这是非常非常不可能的!

在通用浮点运算中,没有简单的方法可以避免舍入错误。数字0.3没有精确的二进制浮点表示形式。

我建议阅读每个计算机科学家都应该知道的关于浮点运算的知识,以熟悉数字浮点表示固有的权衡。

要真正解决你的问题,你应该问自己几个问题:

  • 你对精度的要求有多严格?为什么0.30000000000000004超出了您的误差范围?四舍五入你的结果可以接受吗
  • 有没有什么方法可以表示你的数字,并用整数进行大部分运算?例如,如果你知道你只会遇到有理数,那么它们可以用整数商和整数分母来表示。从那里,您可以尝试尽可能长时间地将强制转换推迟到浮点,以防止累积舍入误差
  • 如果不能对整数进行计算,是否有其他数据类型可以使用,例如BigDecimal

最终,当涉及到浮点精度问题时,您通常必须根据特定问题提出的要求定制解决方案。