Проверьте наличие
Кто-нибудь знает метод проверки того, является ли двойное (или целое) бесконечным, например, когда выполняется операция 1/0?
isfinite (n), похоже, не работает.
Ответы
Ответ 1
Вы можете проверить
if(d == INFINITY) {}
или
if(d > DBL_MAX) {}
INFINITY
- константное выражение с плавающей точкой, определенное в math.h
, представляющее положительную бесконечность;
DBL_MAX
- константа, определенная в float.h
, представляющая наибольший двойной, который может быть представлен.
Проверьте также здесь
Ответ 2
< math.h > имеет макрос isinf
, определенный для проверки размера его аргумента, а затем вызывает соответствующую функцию __isinf
для типа:
#define isinf(x) \
( sizeof (x) == sizeof(float ) ? __isinff((float)(x)) \
: sizeof (x) == sizeof(double) ? __isinfd((double)(x)) \
: __isinf ((long double)(x)))
Макрос тот же в архитектуре /i 386/math.h и architecture/arm/math.h; по-видимому, различаются реализации самих функций.
Это вернет истину для отрицательной бесконечности, а также положительную, если вы столкнулись с такой ситуацией:
float in = INFINITY;
float ni = -INFINITY;
NSLog(@"%@", isinf(in) ? @"Yes indeed!" : @"That is not so.");
NSLog(@"%@", isinf(ni) ? @"You betcha!" : @"I'm afraid not.");
2011-10-26 18: 41: 53.424 ToInfinityEtc [30197: 903] Да, действительно!
2011-10-26 18: 41: 53.426 ToInfinityEtc [30197: 903] Вы betcha!