Tim*_*ers 1 .net c++ java nan infinity
无穷大不是任何标准数学中的数字,这将导致人们思考表达
Double.isNaN(Double.POSITIVE_INFINITY)
Run Code Online (Sandbox Code Playgroud)
应该评估true.但是,快速测试表明它的评估结果为false.仔细查看函数规范可以证实我的怀疑:"isNaN"不应被解释为"不是数字",而是"是非数字值".
我的问题是他们为什么这样实施呢?他们为什么不以这样的方式实现它false呢?它也会回归正或负无穷大?
在实践中,我现在使用的(Double.isNaN(x) || Double.isInfinite(x))方式比我只使用的方式更频繁Double.isNaN(x).因此,最好分别使用Double.isNaN(x)和(Double.isNaN(x) && !Double.isInfinite(x))替代.
即使现在更改它会让人感到困惑 - 以我在这里描述的方式实现和解释函数会不会更好?
还有哪些其他因素在这里起作用?
PS:请省略对被排除在中的法律的任何评论.;)
William Kahan博士在那里有许多作品解释他在IEEE-754决策背后的想法.
我建议你阅读他的作品来理解推理.他是IEEE-754背后的主要力量之一,所以最好从马的口中得到答案.
顺便说一句,在技术意义上,+/ - Inf是仿射扩展实数系统中的数字. 所以,仅仅因为这个原因,我希望isNaN在无限上返回false.
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |