diff options
Diffstat (limited to 'newlib/libm/mathfp/s_isnan.c')
-rw-r--r-- | newlib/libm/mathfp/s_isnan.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/newlib/libm/mathfp/s_isnan.c b/newlib/libm/mathfp/s_isnan.c new file mode 100644 index 0000000..776baa2 --- /dev/null +++ b/newlib/libm/mathfp/s_isnan.c @@ -0,0 +1,125 @@ + +/* @(#)z_isnan.c 1.0 98/08/13 */ + +/* +FUNCTION + <<isnan>>,<<isnanf>>,<<isinf>>,<<isinff>>,<<finite>>,<<finitef>>---test +for exceptional numbers + +INDEX + isnan +INDEX + isinf +INDEX + finite + +INDEX + isnanf +INDEX + isinff +INDEX + finitef + +ANSI_SYNOPSIS + #include <ieeefp.h> + int isnan(double <[arg]>); + int isinf(double <[arg]>); + int finite(double <[arg]>); + int isnanf(float <[arg]>); + int isinff(float <[arg]>); + int finitef(float <[arg]>); + +TRAD_SYNOPSIS + #include <ieeefp.h> + int isnan(<[arg]>) + double <[arg]>; + int isinf(<[arg]>) + double <[arg]>; + int finite(<[arg]>); + double <[arg]>; + int isnanf(<[arg]>); + float <[arg]>; + int isinff(<[arg]>); + float <[arg]>; + int finitef(<[arg]>); + float <[arg]>; + + +DESCRIPTION + These functions provide information on the floating point + argument supplied. + + There are five major number formats - + o+ + o zero + a number which contains all zero bits. + o subnormal + Is used to represent number with a zero exponent, but a non zero fract +ion. + o normal + A number with an exponent, and a fraction + o infinity + A number with an all 1's exponent and a zero fraction. + o NAN + A number with an all 1's exponent and a non zero fraction. + + o- + + <<isnan>> returns 1 if the argument is a nan. <<isinf>> + returns 1 if the argument is infinity. <<finite>> returns 1 if the + argument is zero, subnormal or normal. + + The <<isnanf>>, <<isinff>> and <<finitef>> perform the same + operations as their <<isnan>>, <<isinf>> and <<finite>> + counterparts, but on single precision floating point numbers. + +QUICKREF + isnan - pure +QUICKREF + isinf - pure +QUICKREF + finite - pure +QUICKREF + isnan - pure +QUICKREF + isinf - pure +QUICKREF + finite - pure +*/ + + +/****************************************************************** + * isnan + * + * Input: + * x - pointer to a floating point value + * + * Output: + * An integer that indicates if the number is NaN. + * + * Description: + * This routine returns an integer that indicates if the number + * passed in is NaN (1) or is finite (0). + * + *****************************************************************/ + +#include "fdlibm.h" +#include "zmath.h" + +#ifndef _DOUBLE_IS_32BITS + +int isnan (double x) +{ + __uint32_t lx, hx; + int exp; + + EXTRACT_WORDS (hx, lx, x); + exp = (hx & 0x7ff00000) >> 20; + + if ((exp == 0x7ff) && (hx & 0xf0000 || lx)) + return (1); + else + return (0); +} + +#endif /* _DOUBLE_IS_32BITS */ |