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 SYNOPSIS
31 #include <math.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
40 DESCRIPTION
41 These functions provide information on the floating-point
42 argument supplied.
43
44 There are five major number formats:
45 o+
46 o zero
47 A number which contains all zero bits.
48 o subnormal
49 A number with a zero exponent but a nonzero fraction.
50 o normal
51 A number with an exponent and a fraction.
52 o infinity
53 A number with an all 1's exponent and a zero fraction.
54 o NAN
55 A number with an all 1's exponent and a nonzero fraction.
56
57 o-
58
59 <<isnan>> returns 1 if the argument is a nan. <<isinf>>
60 returns 1 if the argument is infinity. <<finite>> returns 1 if the
61 argument is zero, subnormal or normal.
62
63 Note that by the C99 standard, <<isnan>> and <<isinf>> are macros
64 taking any type of floating-point and are declared in
65 <<math.h>>. Newlib has chosen to declare these both as functions
66 and as macros in <<math.h>>.
67
68 The <<isnanf>>, <<isinff>> and <<finitef>> functions perform the same
69 operations as their <<isnan>>, <<isinf>> and <<finite>>
70 counterparts, but on single-precision floating-point numbers.
71
72 QUICKREF
73 isnan - pure
74 QUICKREF
75 isinf - pure
76 QUICKREF
77 finite - pure
78 QUICKREF
79 isnan - pure
80 QUICKREF
81 isinf - pure
82 QUICKREF
83 finite - pure
84 */
85
86 /*
87 * __isnand(x) returns 1 is x is nan, else 0;
88 * no branching!
89 */
90
91 #define __isnan __isnand
92
93 #include "fdlibm.h"
94
95 #ifdef _NEED_FLOAT64
96
97 int
__isnan64(__float64 x)98 __isnan64 (__float64 x)
99 {
100 __int32_t hx,lx;
101 EXTRACT_WORDS(hx,lx,x);
102 hx &= 0x7fffffff;
103 hx |= (__uint32_t)(lx|(-lx))>>31;
104 hx = 0x7ff00000 - hx;
105 return (int)(((__uint32_t)(hx))>>31);
106 }
107
108 _MATH_ALIAS_i_d(__isnan)
109
110 #endif /* _NEED_FLOAT64 */
111