Проверьте на инф - цель c - PullRequest
       1

Проверьте на инф - цель c

23 голосов
/ 05 сентября 2011

Кто-нибудь знает способ проверки, является ли двойное (или целое) бесконечностью, например, когда выполняется операция 1/0?

isfinite (n) не работает.

Ответы [ 2 ]

39 голосов
/ 05 сентября 2011

Вы можете проверить

if(d == INFINITY) {}

или

if(d > DBL_MAX) {}

INFINITY - это постоянное выражение с плавающей запятой, определенное в math.h, представляющее положительную бесконечность;
DBL_MAX - это константа, определенная в float.h, представляющая наибольший двойник, который может быть представлен.

Проверьте также здесь

21 голосов
/ 26 октября 2011

имеет макрос isinf, определенный для проверки размера своего аргумента, а затем вызывает соответствующую функцию __isinf для типа:

#define isinf(x)    \
        (   sizeof (x) == sizeof(float )    ?   __isinff((float)(x))    \
        :   sizeof (x) == sizeof(double)    ?   __isinfd((double)(x))   \
                                            :   __isinf ((long double)(x)))

Макрос такой же в архитектуре / i386 / math.ч и архитектура / рука / математика; ч;реализации самих функций предположительно отличаются.

Это вернет истину как для отрицательной бесконечности, так и для положительной, если вы столкнетесь с такой вещью:

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] Вы уверены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...