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

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

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

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

В Scala 2.10

3 ответов


Скала 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

какой-то плюс: повод для отдельной 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

метод на самом деле есть. Это просто называется isInfinity вместо isInf.

см. scaladocs для RichDouble строка 36: https://github.com/scala/scala/blob/v2.10.2/src/library/scala/runtime/RichDouble.scala#L36