Подтвердить что ты не робот

Как определить значения бесконечности в Scala?

Scala имеет Double.isNaN для обнаружения not-a-number, но no Double.isInf для обнаружения (положительной или отрицательной) бесконечности.

Почему? Я хотел бы проверить, является ли параметр "реальным" числом (т.е. Имеет числовое значение). Преобразование его в строку и проверка на "inf" или что-то сделают это, но должен быть лучший способ?

Как в С++: http://en.cppreference.com/w/cpp/numeric/math/isinf

Использование Scala 2.10

4b9b3361

Ответ 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