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

所以我有一个Javascript脚本,它将循环中的小部分加在一起,并且它可能会增加0.2到0.1。 然后,这个值被馈送到另一个函数,但问题是我需要0.3,而不是0.30000000000000004。

确保数字得到更正和确切的最简单方法是什么? 请注意,它可能得到0.25 + 0.125等被简单舍入到1小数不会解决问题。

也可以添加0.2 + 0.10000000000000004,虽然这是非常非常不可能的!


通用浮点算法中避免舍入错误的方法并不简单。 数字0.3没有精确的二进制浮点表示。

我建议阅读每位计算机科学家应该了解的浮点算术以熟悉数字浮点表示所固有的权衡。

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

  • 您对精确度的要求有多严格? 为什么您的保证金之外的0.30000000000000004是错误的? 结果是否可以接受?
  • 有没有什么方法可以代表你的数字,并用整数执行大部分算术? 例如,如果你知道你只会遇到有理数,他们可以用一个整数商和一个整数分母表示。 从那里,你可以尝试推迟铸造尽可能长时间浮动,以防止累积舍入误差。
  • 如果无法对整数执行计算,那么是否有可用的备用数据类型,如BigDecimal
  • 最终,当涉及浮点精度问题时,您通常不得不针对您的特定问题提出的要求来定制解决方案。

    链接地址: http://www.djcxy.com/p/27501.html

    上一篇: What is the best way to deal with floating point errors?

    下一篇: IEEE 754 floating point arithmetic rounding error in c# and javascript