如何克服Java中的不准确性

如何克服Java中的不准确性,第1张

如何克服Java中的不准确性

对于浮点数,您必须采取zen *的方法:与其消除错误,不如从容应对。

实际上,这通常意味着要执行以下 *** 作:

  • 在显示数字时,用于
    String.format
    指定要显示的精度(它将为您进行适当的舍入)
  • 与预期值进行比较时,请勿寻找相等(
    ==
    )。而是寻找一个足够小的增量:
    Math.abs(myValue - expectedValue) <= someSmallError

编辑
:对于无穷大,相同的原理适用,但是要进行一些调整:您必须选择一些数字以“足够大”以将其视为无穷大。再次是因为您必须学会忍受而不是解决不精确的价值观。在诸如tan(90度)之类的情况下,双精度不能以无限的精度存储π/
2,因此您输入的内容非常接近但不完全是90度,因此结果是大,但不是无限。您可能会问“为什么

Double.POSITIVE_INFINITY
当您传递最接近π/
2的双精度数时,它们为什么不返回”,但这可能会导致模棱两可:如果您真的想要该数字的正切而不是90度,该怎么办?或者,如果(由于以前的浮点错误),你有什么东西是
略有 比最接近的值离π/ 2更远,但对于您的需求,它仍然是π/ 2?JDK不会为您做出任意决定,而是会以您的票面价值来对待您接近但并非完全是π/
2的数字,从而为您带来一个大但并非无限的结果。


对于某些 *** 作,尤其是与货币相关的 *** 作,可以

BigDecimal
用来消除浮点错误:您可以真正表示0.1之类的值(而不是真正接近0.1的值,这是float或double可以做到的最好)。但这要慢得多,并且对于诸如sin
/ cos之类的东西(至少对于内置库而言)没有帮助。

*这实际上可能不是禅宗,但在口语上



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存