检查inf - 目标c

Joh*_*n67 23 objective-c

有人会知道测试double(或整数)是否为无穷大的方法,例如当执行1/0操作时?

isfinite(n)似乎不起作用.

Man*_*lio 39

你可以检查一下

if(d == INFINITY) {}
Run Code Online (Sandbox Code Playgroud)

要么

if(d > DBL_MAX) {}
Run Code Online (Sandbox Code Playgroud)

INFINITY 是一个math.h表示正无穷大的常量浮点表达式;
DBL_MAX是一个常量,用于float.h表示可以表示的最大双精度.

也请点击此处

  • 注意:这些测试仅检查正无穷大,而不是负无穷大. (3认同)

Jos*_*ell 21

<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)))
Run Code Online (Sandbox Code Playgroud)

在architecture/i386/math.h和architecture/arm/math.h中,宏是相同的; 功能本身的实现可能会有所不同.

如果碰巧遇到这样的事情,这将对负无穷大和正数返回true:

float in = INFINITY;
float ni = -INFINITY;
NSLog(@"%@", isinf(in) ? @"Yes indeed!" : @"That is not so.");
NSLog(@"%@", isinf(ni) ? @"You betcha!" : @"I'm afraid not.");
Run Code Online (Sandbox Code Playgroud)

2011-10-26 18:41:53.424 ToInfinityEtc [30197:903]是的!
2011-10-26 18:41:53.426 ToInfinityEtc [30197:903]你打赌!