Update copyright notices with scripts/update-copyrights
[glibc.git] / sysdeps / ieee754 / ldbl-128ibm / ieee754.h
blob52dbe8be9cc23cbb546cbee6ce03e16f247a8e6b
1 /* Copyright (C) 1992-2014 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
18 #ifndef _IEEE754_H
20 #define _IEEE754_H 1
21 #include <features.h>
23 #include <endian.h>
25 __BEGIN_DECLS
27 union ieee754_float
29 float f;
31 /* This is the IEEE 754 single-precision format. */
32 struct
34 #if __BYTE_ORDER == __BIG_ENDIAN
35 unsigned int negative:1;
36 unsigned int exponent:8;
37 unsigned int mantissa:23;
38 #endif /* Big endian. */
39 #if __BYTE_ORDER == __LITTLE_ENDIAN
40 unsigned int mantissa:23;
41 unsigned int exponent:8;
42 unsigned int negative:1;
43 #endif /* Little endian. */
44 } ieee;
46 /* This format makes it easier to see if a NaN is a signalling NaN. */
47 struct
49 #if __BYTE_ORDER == __BIG_ENDIAN
50 unsigned int negative:1;
51 unsigned int exponent:8;
52 unsigned int quiet_nan:1;
53 unsigned int mantissa:22;
54 #endif /* Big endian. */
55 #if __BYTE_ORDER == __LITTLE_ENDIAN
56 unsigned int mantissa:22;
57 unsigned int quiet_nan:1;
58 unsigned int exponent:8;
59 unsigned int negative:1;
60 #endif /* Little endian. */
61 } ieee_nan;
64 #define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
67 union ieee754_double
69 double d;
71 /* This is the IEEE 754 double-precision format. */
72 struct
74 #if __BYTE_ORDER == __BIG_ENDIAN
75 unsigned int negative:1;
76 unsigned int exponent:11;
77 /* Together these comprise the mantissa. */
78 unsigned int mantissa0:20;
79 unsigned int mantissa1:32;
80 #endif /* Big endian. */
81 #if __BYTE_ORDER == __LITTLE_ENDIAN
82 /* Together these comprise the mantissa. */
83 unsigned int mantissa1:32;
84 unsigned int mantissa0:20;
85 unsigned int exponent:11;
86 unsigned int negative:1;
87 #endif /* Little endian. */
88 } ieee;
90 /* This format makes it easier to see if a NaN is a signalling NaN. */
91 struct
93 #if __BYTE_ORDER == __BIG_ENDIAN
94 unsigned int negative:1;
95 unsigned int exponent:11;
96 unsigned int quiet_nan:1;
97 /* Together these comprise the mantissa. */
98 unsigned int mantissa0:19;
99 unsigned int mantissa1:32;
100 #else
101 /* Together these comprise the mantissa. */
102 unsigned int mantissa1:32;
103 unsigned int mantissa0:19;
104 unsigned int quiet_nan:1;
105 unsigned int exponent:11;
106 unsigned int negative:1;
107 #endif
108 } ieee_nan;
111 #define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
114 /* IBM extended format for long double.
116 Each long double is made up of two IEEE doubles. The value of the
117 long double is the sum of the values of the two parts. The most
118 significant part is required to be the value of the long double
119 rounded to the nearest double, as specified by IEEE. For Inf
120 values, the least significant part is required to be one of +0.0 or
121 -0.0. No other requirements are made; so, for example, 1.0 may be
122 represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a
123 NaN is don't-care. */
125 union ibm_extended_long_double
127 long double ld;
128 union ieee754_double d[2];
131 __END_DECLS
133 #endif /* ieee754.h */