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