Может кто-нибудь объяснить мне нан в Руби?
Вопрос
Я только что нашел ошибку в некоторых номерах манипуляций в моей программе, и я получаю 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)
так как я не получаю предупреждение о журнале, и он проходит метрика на мой метрический метод, который в том, где я получаю мой FloatDomainError
Теперь поправьте меня, если я ошибаюсь, но не кажется ли семантически неверным иметь NaN
(Не число) быть типа числовой ?? Может кто-то объяснить это мне?
Кстати, используя jruby-1.4.1
Решение
IEEE 754 Числа с плавающей плавающей точкой определяют -infinity + Infinity и NotAnumber, чтобы позволить этому реагировать на то, чтобы подразделить подразделение ноль. Вы также можете рассчитать с ними, например, 2 + INF = INF
NAN не является функцией Uniqe Ruby, они являются числовыми в Java, C ++, ... тоже
Другие советы
Я думаю, что делает NAN ряд делает идеально почувствовать ...
попробуйте 0.0 / 0.0 в IRB -> результат нан (который в этом случае является бесконечности)
Бесконечность математически рода число, но все же, вы не можете выразить его с помощью DataType ... В математике вы тоже используете специальный символ ...
PS: Вы можете использовать метрику .NAN? Чтобы проверить это ... тогда он должен работать, как вы ожидаете ...