Если вы используете арифметику IEEE 754, как вы почти наверняка, бесконечность - это четко определенные значения и определенные результаты для всех арифметических операций. В частности,
infinity - infinity = NaN
Положительные и отрицательные значения бесконечности и NaN
значения являются единственными значениями, для которых это верно. NaN - это специальные значения "не числа", используемые для указания ошибок функций в домене, например, sqrt(-1)
. Кроме того:
NaN != NaN
NaN
s - единственные значения, для которых это верно.
Таким образом:
bool is_infinite(double x) {
double y = x - x;
return x == x && y != y;
}
вернет истину тогда и только тогда, когда x
будет положительной или отрицательной бесконечностью. Добавьте тест для x > 0
, если вы хотите проверять только положительную бесконечность.