我刚刚在我的程序中发现了一些数字操作的错误,我得到了一个FloatDomainError (NaN)
因此,我开始使用以下命令记录传入的数字:
if(metric.is_a?(Numeric))
self.metric = metric
else
LOGGER.warn("metric #{metric} is not a number")
self.metric=0
end但是传入的数字是NaN,它显然是is_a?(Numeric),因为我没有收到日志警告,它将指标传递给我的metric=方法,这是我获得FloatDomainError的地方
现在,如果我错了,请纠正我,但是让一个数字(而不是A数字)是NaN类型是不是在语义上是错误的??有人能给我解释一下吗?
顺便说一句,使用Jruby-1.4.1
发布于 2010-09-01 22:08:21
IEEE754浮点数定义了-INFINITY +无穷大和NotANumber,以便能够对除以零进行反应。你也可以用这些来计算,例如2+ INF = INF
NaN不是唯一的红宝石特性,它们在java、c++等语言中都是数字。也是
发布于 2010-09-01 22:06:31
我认为让NaN成为一个数字是非常有意义的。
在irb ->中尝试0.0 / 0.0,结果是NaN (在本例中是无穷大)
无穷大在数学上是一种数字,但你仍然不能用数据类型来表达它……在数学中,你也使用特殊的符号...
附言:你可以使用metric.nan吗?为了检查它..。那么它应该像你所期望的那样工作。
https://stackoverflow.com/questions/3618844
复制相似问题