annotate lib/ieee754.in.h @ 40186:8964917f9574

autoupdate
author Karl Berry <karl@freefriends.org>
date Mon, 18 Feb 2019 08:02:49 -0800
parents b06060465f09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 39759
diff changeset
1 /* Copyright (C) 1992-2019 Free Software Foundation, Inc.
39759
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
2 This file is part of the GNU C Library.
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
3
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
4 The GNU C Library is free software; you can redistribute it and/or
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
5 modify it under the terms of the GNU Lesser General Public
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
6 License as published by the Free Software Foundation; either
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
7 version 2.1 of the License, or (at your option) any later version.
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
8
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
9 The GNU C Library is distributed in the hope that it will be useful,
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
12 Lesser General Public License for more details.
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
13
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
14 You should have received a copy of the GNU Lesser General Public
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
15 License along with the GNU C Library; if not, see
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
16 <http://www.gnu.org/licenses/>. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
17
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
18 #ifndef _IEEE754_H
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
19
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
20 #define _IEEE754_H 1
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
21
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
22 #ifndef _GL_GNULIB_HEADER
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
23 /* Ordinary glibc usage. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
24 # include <features.h>
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
25 # include <endian.h>
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
26 #else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
27 /* Gnulib usage. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
28 # ifndef __BEGIN_DECLS
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
29 # ifdef __cplusplus
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
30 # define __BEGIN_DECLS extern "C" {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
31 # define __END_DECLS }
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
32 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
33 # define __BEGIN_DECLS
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
34 # define __END_DECLS
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
35 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
36 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
37 # ifndef __FLOAT_WORD_ORDER
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
38 # define __LITTLE_ENDIAN 1234
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
39 # define __BIG_ENDIAN 4321
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
40 # ifdef WORDS_BIGENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
41 # define __BYTE_ORDER __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
42 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
43 # define __BYTE_ORDER __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
44 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
45 # define __FLOAT_WORD_ORDER __BYTE_ORDER
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
46 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
47 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
48
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
49 __BEGIN_DECLS
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
50
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
51 union ieee754_float
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
52 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
53 float f;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
54
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
55 /* This is the IEEE 754 single-precision format. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
56 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
57 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
58 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
59 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
60 unsigned int exponent:8;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
61 unsigned int mantissa:23;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
62 #endif /* Big endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
63 #if __BYTE_ORDER == __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
64 unsigned int mantissa:23;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
65 unsigned int exponent:8;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
66 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
67 #endif /* Little endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
68 } ieee;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
69
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
70 /* This format makes it easier to see if a NaN is a signalling NaN. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
71 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
72 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
73 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
74 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
75 unsigned int exponent:8;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
76 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
77 unsigned int mantissa:22;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
78 #endif /* Big endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
79 #if __BYTE_ORDER == __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
80 unsigned int mantissa:22;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
81 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
82 unsigned int exponent:8;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
83 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
84 #endif /* Little endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
85 } ieee_nan;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
86 };
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
87
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
88 #define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
89
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
90
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
91 union ieee754_double
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
92 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
93 double d;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
94
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
95 /* This is the IEEE 754 double-precision format. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
96 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
97 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
98 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
99 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
100 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
101 /* Together these comprise the mantissa. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
102 unsigned int mantissa0:20;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
103 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
104 #endif /* Big endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
105 #if __BYTE_ORDER == __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
106 # if __FLOAT_WORD_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
107 unsigned int mantissa0:20;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
108 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
109 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
110 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
111 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
112 /* Together these comprise the mantissa. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
113 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
114 unsigned int mantissa0:20;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
115 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
116 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
117 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
118 #endif /* Little endian. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
119 } ieee;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
120
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
121 /* This format makes it easier to see if a NaN is a signalling NaN. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
122 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
123 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
124 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
125 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
126 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
127 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
128 /* Together these comprise the mantissa. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
129 unsigned int mantissa0:19;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
130 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
131 #else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
132 # if __FLOAT_WORD_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
133 unsigned int mantissa0:19;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
134 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
135 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
136 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
137 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
138 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
139 /* Together these comprise the mantissa. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
140 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
141 unsigned int mantissa0:19;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
142 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
143 unsigned int exponent:11;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
144 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
145 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
146 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
147 } ieee_nan;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
148 };
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
149
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
150 #define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
151
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
152
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
153 union ieee854_long_double
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
154 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
155 long double d;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
156
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
157 /* This is the IEEE 854 double-extended-precision format. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
158 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
159 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
160 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
161 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
162 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
163 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
164 unsigned int mantissa0:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
165 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
166 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
167 #if __BYTE_ORDER == __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
168 # if __FLOAT_WORD_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
169 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
170 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
171 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
172 unsigned int mantissa0:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
173 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
174 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
175 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
176 unsigned int mantissa0:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
177 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
178 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
179 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
180 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
181 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
182 } ieee;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
183
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
184 /* This is for NaNs in the IEEE 854 double-extended-precision format. */
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
185 struct
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
186 {
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
187 #if __BYTE_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
188 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
189 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
190 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
191 unsigned int one:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
192 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
193 unsigned int mantissa0:30;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
194 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
195 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
196 #if __BYTE_ORDER == __LITTLE_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
197 # if __FLOAT_WORD_ORDER == __BIG_ENDIAN
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
198 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
199 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
200 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
201 unsigned int mantissa0:30;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
202 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
203 unsigned int one:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
204 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
205 # else
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
206 unsigned int mantissa1:32;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
207 unsigned int mantissa0:30;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
208 unsigned int quiet_nan:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
209 unsigned int one:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
210 unsigned int exponent:15;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
211 unsigned int negative:1;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
212 unsigned int empty:16;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
213 # endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
214 #endif
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
215 } ieee_nan;
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
216 };
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
217
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
218 #define IEEE854_LONG_DOUBLE_BIAS 0x3fff
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
219
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
220 __END_DECLS
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
221
4be92e43380a ieee754-h: new module
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff changeset
222 #endif /* ieee754.h */