Как определить значения бесконечности в Scala?
Scala имеет Double.isNaN
для обнаружения not-a-number, но no Double.isInf
для обнаружения (положительной или отрицательной) бесконечности.
Почему? Я хотел бы проверить, является ли параметр "реальным" числом (т.е. Имеет числовое значение). Преобразование его в строку и проверка на "inf" или что-то сделают это, но должен быть лучший способ?
Как в С++: http://en.cppreference.com/w/cpp/numeric/math/isinf
Использование Scala 2.10
Ответы
Ответ 1
Scala Double
имеет метод isInfinite
и Neg
/Pos
:
scala> val a = 22.0
a: Double = 22.0
scala> a.isInfinite
res0: Boolean = false
scala> val b = 2.0/0
b: Double = Infinity
scala> b.isInfinite
res1: Boolean = true
scala> b.isPosInfinity
res4: Boolean = true
Ответ 2
То, что говорили все остальные, плюс это: причина для отдельного isNaN
заключается в том, что сравнение с NaN
является особенным:
scala> val bar = Double.NaN
bar: Double = NaN
scala> bar == Double.NaN
res0: Boolean = false
Такие правила не применяются для бесконечности, поэтому нет необходимости в специальной функции проверки (кроме удобства обработки знака):
scala> val foo: Double = Double.PositiveInfinity
foo: Double = Infinity
scala> foo == Double.PositiveInfinity
res1: Boolean = true
Ответ 3
На самом деле существует метод. Он просто называется isInfinity
вместо isInf
.
См. "Скайдадоки" для строки RichDouble
строка 36: https://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36