能否达到这种双精度舍入误差条件?

Can this double precision rounding error condition ever be reached?

我在 IronPython fork of the DLR:

中找到了这行代码
return value < 0.0 || 1.0 / value < 0.0 ? -0.0 : 0.0;

其中 valuedouble。没有覆盖测试用例,因为 1.0 / double.MaxValue > 0 我正在努力了解如何达到 1.0 / value < 0.0 条件。

有什么想法吗?

编辑 我的意思是通过有意义的方式达到 value < 0.0 == false1.0 / value < 0.0 == true

这个条件是为了捕获 value 本身就是 -0.0 的情况。当输入为 -0.0.

时,它确保方法 returns -0.0

条件-0.0 < 0.0为假,但1.0 / -0.0-∞-∞ < 0.0为真。

因此,当 value-0.0 时,1.0 / value < 0.0 的计算结果为真,而 value < 0.0 的结果为假。

这一点得到了您引用的那一行上方的评论的支持:

// Preserve the sign of the input, including +/-0.0
return value < 0.0 || 1.0 / value < 0.0 ? -0.0 : 0.0;

浮点数很奇怪,尤其是在像这样的边缘情况下。请参阅 this answer 了解更多信息。

如果值为负数,则为负数。

(1 / -0.5) = -2