代码之家  ›  专栏  ›  技术社区  ›  brad

有人能用红宝石给我解释一下吗?

  •  6
  • brad  · 技术社区  · 14 年前

    我刚刚在我的程序中发现了一个数字运算的错误,我得到了一个 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传递给metric=method,这就是我得到日志警告的地方 FloatDomainError

    如果我错了,请纠正我,但是有一个 (不是数字)是数字类型??有人能给我解释一下吗?

    顺便说一句,使用Jruby-1.4.1

    2 回复  |  直到 14 年前
        1
  •  5
  •   Nikolaus Gradwohl    14 年前

    ieee754浮点数定义了-INFINITY+INFINITY和NotANumber,使得它可以对被零除的情况做出反应。你也可以用这些来计算例如2+INF=INF

    NaN不是uniqe的ruby特性,它们在java、c++、。。。太

        2
  •  7
  •   apirogov    14 年前

    我认为把NaN变成一个数字是非常有意义的。。。

    在irb中尝试0.0/0.0->结果是NaN(在本例中是无穷大)

    无穷大在数学上是一个数字,但仍然不能用数据类型来表示。。。在数学中你也使用了一个特殊的符号。。。

    附言:你可以用什么?南?检查一下。。。那么它应该像你所期望的那样工作。。。