我刚刚在我的程序中发现了一些数字操作的错误,我得到一个FloatDomainError(NaN)
所以我开始记录传入的号码:
if(metric.is_a?(Numeric)) self.metric = metric else LOGGER.warn("metric #{metric} is not a number") self.metric=0 end
但传入的数字是NaN,显然是__?(数字),因为我没有得到我的日志警告,它将度量传递给我的metric =方法,这是我得到我的FloatDomainError的地方
现在,如果我错了,请纠正我,但是如果NaN(非数字)是Numeric类型,那么在语义上是否错误?谁可以给我解释一下这个?
BTW使用Jruby-1.4.1
解决方法
IEEE 754浮点数定义-INFINITY INFINITY和NotANumber以使得可以做出反应,假设除以零.你也可以用这些来计算例如2 INF = INF
NaN不是一个独特的ruby功能,它们在java,c,……中也是数字