【问题标题】:Comparing double-precision numbers that are potentially infinite比较可能无限的双精度数
【发布时间】:2021-08-10 09:58:25
【问题描述】:

我有两个可能等于 Infinity 的双变量。我想比较它们并允许误差范围。由于我使用的环境,我无法使用 assertEquals。

我试过了

assert Math.abs(a-b)<DELTA;

但如果 a 和 b 都是 Infinity,则返回 false。有没有一种简单的方法来检查相等性而不对 Infinity 情况进行显式检查?

【问题讨论】:

  • 您使用什么断言/单元测试框架?他们中的大多数都有一个带有增量的assertEquals 变体。
  • 为什么不assert a == b || Math.abs(a-b) &lt; DELTA;
  • 你想如何处理 NaN?
  • @user207421 这可能是最好的选择。我希望有像 Double.compareWithMargin 这样的东西,但我想没有这样的内置功能。谢谢!
  • 无需猜测是否存在。只需查找 Double 的 Javadoc。

标签: java double equality infinity


【解决方案1】:

对此没有内置解决方案。您最简单的解决方案是进行一项检查,该检查涵盖无限相等检查,另一项检查处理增量比较。以下可能是处理正无穷和负无穷的最简单方法:

assert a == b || Math.abs(a-b) < DELTA;

【讨论】:

  • 解决方案由comment@user207421 提供。
猜你喜欢
  • 1970-01-01
  • 2015-12-17
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多