能否达到这种双精度舍入误差条件?
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;
其中 value
是 double
。没有覆盖测试用例,因为 1.0 / double.MaxValue > 0
我正在努力了解如何达到 1.0 / value < 0.0
条件。
有什么想法吗?
编辑
我的意思是通过有意义的方式达到 value < 0.0 == false
和 1.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
我在 IronPython fork of the DLR:
中找到了这行代码return value < 0.0 || 1.0 / value < 0.0 ? -0.0 : 0.0;
其中 value
是 double
。没有覆盖测试用例,因为 1.0 / double.MaxValue > 0
我正在努力了解如何达到 1.0 / value < 0.0
条件。
有什么想法吗?
编辑
我的意思是通过有意义的方式达到 value < 0.0 == false
和 1.0 / value < 0.0 == true
这个条件是为了捕获 value
本身就是 -0.0
的情况。当输入为 -0.0
.
-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