检查inf - 目标c

时间:2011-09-05 00:29:55

标签: objective-c

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

isfinite(n)似乎不起作用。

2 个答案:

答案 0 :(得分:39)

您可以查看

if(d == INFINITY) {}

if(d > DBL_MAX) {}

INFINITY是在math.h中定义的常量浮点表达式,表示正无穷大;
DBL_MAXfloat.h中定义的常量,表示可以表示的最大双精度。

同时检查here

答案 1 :(得分: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)))

在architecture / i386 / 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]你打赌!