1 /* 2 * ==================================================== 3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 4 * 5 * Developed at SunPro, a Sun Microsystems, Inc. business. 6 * Permission to use, copy, modify, and distribute this 7 * software is freely granted, provided that this notice 8 * is preserved. 9 * ==================================================== 10 */ 11 12 /* 13 FUNCTION 14 <<isnan>>, <<isnanf>>, <<isinf>>, <<isinff>>, <<finite>>, <<finitef>>---test for exceptional numbers 15 16 INDEX 17 isnan 18 INDEX 19 isinf 20 INDEX 21 finite 22 23 INDEX 24 isnanf 25 INDEX 26 isinff 27 INDEX 28 finitef 29 30 ANSI_SYNOPSIS 31 #include <ieeefp.h> 32 int isnan(double <[arg]>); 33 int isinf(double <[arg]>); 34 int finite(double <[arg]>); 35 int isnanf(float <[arg]>); 36 int isinff(float <[arg]>); 37 int finitef(float <[arg]>); 38 39 TRAD_SYNOPSIS 40 #include <ieeefp.h> 41 int isnan(<[arg]>) 42 double <[arg]>; 43 int isinf(<[arg]>) 44 double <[arg]>; 45 int finite(<[arg]>); 46 double <[arg]>; 47 int isnanf(<[arg]>); 48 float <[arg]>; 49 int isinff(<[arg]>); 50 float <[arg]>; 51 int finitef(<[arg]>); 52 float <[arg]>; 53 54 55 DESCRIPTION 56 These functions provide information on the floating-point 57 argument supplied. 58 59 There are five major number formats: 60 o+ 61 o zero 62 A number which contains all zero bits. 63 o subnormal 64 A number with a zero exponent but a nonzero fraction. 65 o normal 66 A number with an exponent and a fraction. 67 o infinity 68 A number with an all 1's exponent and a zero fraction. 69 o NAN 70 A number with an all 1's exponent and a nonzero fraction. 71 72 o- 73 74 <<isnan>> returns 1 if the argument is a nan. <<isinf>> 75 returns 1 if the argument is infinity. <<finite>> returns 1 if the 76 argument is zero, subnormal or normal. 77 78 Note that by the C99 standard, <<isnan>> and <<isinf>> are macros 79 taking any type of floating-point and are declared in 80 <<math.h>>. Newlib has chosen to declare these as macros in 81 <<math.h>> and as functions in <<ieeefp.h>>. 82 83 The <<isnanf>>, <<isinff>> and <<finitef>> functions perform the same 84 operations as their <<isnan>>, <<isinf>> and <<finite>> 85 counterparts, but on single-precision floating-point numbers. 86 87 QUICKREF 88 isnan - pure 89 QUICKREF 90 isinf - pure 91 QUICKREF 92 finite - pure 93 QUICKREF 94 isnan - pure 95 QUICKREF 96 isinf - pure 97 QUICKREF 98 finite - pure 99 */ 100 101 /* 102 * __isnand(x) returns 1 is x is nan, else 0; 103 * no branching! 104 */ 105 106 #include "fdlibm.h" 107 108 #ifndef _DOUBLE_IS_32BITS 109 110 int 111 _DEFUN (__isnand, (x), 112 double x) 113 { 114 __int32_t hx,lx; 115 EXTRACT_WORDS(hx,lx,x); 116 hx &= 0x7fffffff; 117 hx |= (__uint32_t)(lx|(-lx))>>31; 118 hx = 0x7ff00000 - hx; 119 return (int)(((__uint32_t)(hx))>>31); 120 } 121 122 #endif /* _DOUBLE_IS_32BITS */ 123