【发布时间】:2014-01-10 11:07:55
【问题描述】:
在任何标准数学中,无穷大都不是一个数字,这会让人们想到表达式
Double.isNaN(Double.POSITIVE_INFINITY)
应该评估为true。但是,快速测试显示它的计算结果为false。仔细查看函数规范证实了我的怀疑:“isNaN”不应被解释为“不是数字”,而是“是一个非数字值”。
我的问题是他们为什么要这样实现它?为什么他们不以这样一种方式实现它,即它也将返回 false 以表示正无穷或负无穷?
实际上,我现在使用(Double.isNaN(x) || Double.isInfinite(x)) 的频率比我只使用Double.isNaN(x) 的频率要高。因此,最好分别使用Double.isNaN(x) 和(Double.isNaN(x) && !Double.isInfinite(x))。
即使现在更改它会令人困惑 - 以我在此处描述的方式实现和解释该功能不是更好吗?
还有哪些其他考虑因素在这里起作用?
PS:请省略对排中律的任何评论。 ;)
【问题讨论】:
-
为什么标记为
C++? -
但是在某些集合中,无穷大被认为是一个数字,例如en.wikipedia.org/wiki/Extended_real_number_line。此外,在 IEEE 数学中,与
NaN不同,无穷大至少服从不等式比较(<、>等)。 -
那么
C++有什么不同吗? -
@PascalCuoq:你是说'“isNaN(INFINITY)==false”是假的'是假的?我认为你错了是错误的。
-
@Manu343726 没错,代码不是 c++,但问题是适用于无数种编程语言(本质上)
标签: java c++ .net nan infinity