比较可能无限的双精度数

Comparing double-precision numbers that are potentially infinite

提问人:Shaharg 提问时间:5/21/2021 更新时间:11/28/2021 访问量:108

问:

我有两个双精度变量,它们可能等于无穷大。我想对它们进行比较,并允许有一定的误差。由于我使用的环境,我无法使用 assertEquals。

我试过了

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

但是,如果 a 和 b 都是无穷大,则返回 false。有没有一种捷径可以在不对 Infinity 情况进行明确检查的情况下检查相等性?

java 等式 无穷大

评论

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

答:

0赞 M. Justin 11/28/2021 #1

没有内置的解决方案。最简单的解决方案是进行一次检查,包括无穷大相等性检查,另一次检查处理增量比较。以下是处理正无穷大和负无穷大的最简单方法:

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

评论

0赞 M. Justin 11/28/2021
解决方案由 @user207421 的评论提供。