40 lines
588 B
C
40 lines
588 B
C
|
#include <assert.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
/* functions missing here are architecture-specific and are in i386/float */
|
||
|
|
||
|
int isfinite(double x)
|
||
|
{
|
||
|
/* return value based on classification */
|
||
|
switch (fpclassify(x))
|
||
|
{
|
||
|
case FP_INFINITE:
|
||
|
case FP_NAN:
|
||
|
return 0;
|
||
|
|
||
|
case FP_NORMAL:
|
||
|
case FP_SUBNORMAL:
|
||
|
case FP_ZERO:
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/* if we get here, fpclassify is buggy */
|
||
|
assert(0);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
int isinf(double x)
|
||
|
{
|
||
|
return fpclassify(x) == FP_INFINITE;
|
||
|
}
|
||
|
|
||
|
int isnan(double x)
|
||
|
{
|
||
|
return fpclassify(x) == FP_NAN;
|
||
|
}
|
||
|
|
||
|
int isnormal(double x)
|
||
|
{
|
||
|
return fpclassify(x) == FP_NORMAL;
|
||
|
}
|