Mercurial > hg > octave-kai > gnulib-hg
annotate lib/math.in.h @ 9375:96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
author | Ben Pfaff <blp@cs.stanford.edu> |
---|---|
date | Sat, 20 Oct 2007 13:08:26 -0700 |
parents | bec01fc15c2f |
children | 9572edc3cc57 |
rev | line source |
---|---|
9255 | 1 /* A GNU-like <math.h>. |
2 | |
3 Copyright (C) 2002-2003, 2007 Free Software Foundation, Inc. | |
4 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9297
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
9255 | 6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9297
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9297
diff
changeset
|
8 (at your option) any later version. |
9255 | 9 |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
9297
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
9255 | 17 |
18 #ifndef _GL_MATH_H | |
19 | |
20 /* The include_next requires a split double-inclusion guard. */ | |
21 #@INCLUDE_NEXT@ @NEXT_MATH_H@ | |
22 | |
23 #ifndef _GL_MATH_H | |
24 #define _GL_MATH_H | |
25 | |
26 | |
27 /* The definition of GL_LINK_WARNING is copied here. */ | |
28 | |
29 | |
30 #ifdef __cplusplus | |
31 extern "C" { | |
32 #endif | |
33 | |
34 | |
35 /* Write x as | |
36 x = mantissa * 2^exp | |
37 where | |
38 If x finite and nonzero: 0.5 <= |mantissa| < 1.0. | |
39 If x is zero: mantissa = x, exp = 0. | |
40 If x is infinite or NaN: mantissa = x, exp unspecified. | |
9312
bec01fc15c2f
Rename parameter 'exp' to 'expptr', to avoid gcc warnings.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
41 Store exp in *EXPPTR and return mantissa. */ |
9255 | 42 #if @GNULIB_FREXP@ |
43 # if @REPLACE_FREXP@ | |
44 # define frexp rpl_frexp | |
9312
bec01fc15c2f
Rename parameter 'exp' to 'expptr', to avoid gcc warnings.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
45 extern double frexp (double x, int *expptr); |
9255 | 46 # endif |
47 #elif defined GNULIB_POSIXCHECK | |
48 # undef frexp | |
49 # define frexp(x,e) \ | |
50 (GL_LINK_WARNING ("frexp is unportable - " \ | |
51 "use gnulib module frexp for portability"), \ | |
52 frexp (x, e)) | |
53 #endif | |
54 | |
55 | |
56 #if @GNULIB_MATHL@ || !@HAVE_DECL_ACOSL@ | |
57 extern long double acosl (long double x); | |
58 #endif | |
59 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
60 # undef acosl | |
61 # define acosl(x) \ | |
62 (GL_LINK_WARNING ("acosl is unportable - " \ | |
63 "use gnulib module mathl for portability"), \ | |
64 acosl (x)) | |
65 #endif | |
66 | |
9285 | 67 |
9255 | 68 #if @GNULIB_MATHL@ || !@HAVE_DECL_ASINL@ |
69 extern long double asinl (long double x); | |
70 #endif | |
71 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
72 # undef asinl | |
73 # define asinl(x) \ | |
74 (GL_LINK_WARNING ("asinl is unportable - " \ | |
75 "use gnulib module mathl for portability"), \ | |
76 asinl (x)) | |
77 #endif | |
78 | |
9285 | 79 |
9255 | 80 #if @GNULIB_MATHL@ || !@HAVE_DECL_ATANL@ |
81 extern long double atanl (long double x); | |
82 #endif | |
83 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
84 # undef atanl | |
85 # define atanl(x) \ | |
86 (GL_LINK_WARNING ("atanl is unportable - " \ | |
87 "use gnulib module mathl for portability"), \ | |
88 atanl (x)) | |
89 #endif | |
90 | |
9285 | 91 |
9295 | 92 #if @GNULIB_CEILF@ |
93 # if !@HAVE_DECL_CEILF@ | |
94 # define ceilf rpl_ceilf | |
95 extern float ceilf (float x); | |
96 # endif | |
97 #elif defined GNULIB_POSIXCHECK | |
98 # undef ceilf | |
99 # define ceilf(x) \ | |
100 (GL_LINK_WARNING ("ceilf is unportable - " \ | |
101 "use gnulib module ceilf for portability"), \ | |
102 ceilf (x)) | |
103 #endif | |
104 | |
9297 | 105 #if @GNULIB_CEILL@ |
106 # if !@HAVE_DECL_CEILL@ | |
107 # define ceill rpl_ceill | |
9255 | 108 extern long double ceill (long double x); |
9297 | 109 # endif |
110 #elif defined GNULIB_POSIXCHECK | |
9255 | 111 # undef ceill |
112 # define ceill(x) \ | |
113 (GL_LINK_WARNING ("ceill is unportable - " \ | |
9297 | 114 "use gnulib module ceill for portability"), \ |
9255 | 115 ceill (x)) |
116 #endif | |
117 | |
9285 | 118 |
9255 | 119 #if @GNULIB_MATHL@ || !@HAVE_DECL_COSL@ |
120 extern long double cosl (long double x); | |
121 #endif | |
122 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
123 # undef cosl | |
124 # define cosl(x) \ | |
125 (GL_LINK_WARNING ("cosl is unportable - " \ | |
126 "use gnulib module mathl for portability"), \ | |
127 cosl (x)) | |
128 #endif | |
129 | |
9285 | 130 |
9255 | 131 #if @GNULIB_MATHL@ || !@HAVE_DECL_EXPL@ |
132 extern long double expl (long double x); | |
133 #endif | |
134 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
135 # undef expl | |
136 # define expl(x) \ | |
137 (GL_LINK_WARNING ("expl is unportable - " \ | |
138 "use gnulib module mathl for portability"), \ | |
139 expl (x)) | |
140 #endif | |
141 | |
9285 | 142 |
9291 | 143 #if @GNULIB_FLOORF@ |
144 # if !@HAVE_DECL_FLOORF@ | |
145 # define floorf rpl_floorf | |
146 extern float floorf (float x); | |
147 # endif | |
148 #elif defined GNULIB_POSIXCHECK | |
149 # undef floorf | |
150 # define floorf(x) \ | |
151 (GL_LINK_WARNING ("floorf is unportable - " \ | |
152 "use gnulib module floorf for portability"), \ | |
153 floorf (x)) | |
154 #endif | |
155 | |
9293 | 156 #if @GNULIB_FLOORL@ |
157 # if !@HAVE_DECL_FLOORL@ | |
158 # define floorl rpl_floorl | |
9255 | 159 extern long double floorl (long double x); |
9293 | 160 # endif |
161 #elif defined GNULIB_POSIXCHECK | |
9255 | 162 # undef floorl |
163 # define floorl(x) \ | |
164 (GL_LINK_WARNING ("floorl is unportable - " \ | |
9293 | 165 "use gnulib module floorl for portability"), \ |
9255 | 166 floorl (x)) |
167 #endif | |
168 | |
9285 | 169 |
9255 | 170 /* Write x as |
171 x = mantissa * 2^exp | |
172 where | |
173 If x finite and nonzero: 0.5 <= |mantissa| < 1.0. | |
174 If x is zero: mantissa = x, exp = 0. | |
175 If x is infinite or NaN: mantissa = x, exp unspecified. | |
9312
bec01fc15c2f
Rename parameter 'exp' to 'expptr', to avoid gcc warnings.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
176 Store exp in *EXPPTR and return mantissa. */ |
9255 | 177 #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ |
178 # define frexpl rpl_frexpl | |
179 #endif | |
180 #if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || !@HAVE_DECL_FREXPL@ | |
9312
bec01fc15c2f
Rename parameter 'exp' to 'expptr', to avoid gcc warnings.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
181 extern long double frexpl (long double x, int *expptr); |
9255 | 182 #endif |
183 #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK | |
184 # undef frexpl | |
185 # define frexpl(x,e) \ | |
186 (GL_LINK_WARNING ("frexpl is unportable - " \ | |
187 "use gnulib module frexpl for portability"), \ | |
188 frexpl (x, e)) | |
189 #endif | |
190 | |
9285 | 191 |
9255 | 192 /* Return x * 2^exp. */ |
193 #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ | |
194 # define ldexpl rpl_ldexpl | |
195 #endif | |
196 #if (@GNULIB_LDEXPL@ && @REPLACE_LDEXPL@) || !@HAVE_DECL_LDEXPL@ | |
197 extern long double ldexpl (long double x, int exp); | |
198 #endif | |
199 #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK | |
200 # undef ldexpl | |
201 # define ldexpl(x,e) \ | |
202 (GL_LINK_WARNING ("ldexpl is unportable - " \ | |
203 "use gnulib module ldexpl for portability"), \ | |
204 ldexpl (x, e)) | |
205 #endif | |
206 | |
9285 | 207 |
9255 | 208 #if @GNULIB_MATHL@ || !@HAVE_DECL_LOGL@ |
209 extern long double logl (long double x); | |
210 #endif | |
211 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
212 # undef logl | |
213 # define logl(x) \ | |
214 (GL_LINK_WARNING ("logl is unportable - " \ | |
215 "use gnulib module mathl for portability"), \ | |
216 logl (x)) | |
217 #endif | |
218 | |
9285 | 219 |
9375
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
220 #if @GNULIB_ROUNDF@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
221 # if !@HAVE_DECL_ROUNDF@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
222 # define roundf rpl_roundf |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
223 extern float roundf (float x); |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
224 # endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
225 #elif defined GNULIB_POSIXCHECK |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
226 # undef roundf |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
227 # define roundf(x) \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
228 (GL_LINK_WARNING ("roundf is unportable - " \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
229 "use gnulib module roundf for portability"), \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
230 roundf (x)) |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
231 #endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
232 |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
233 |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
234 #if @GNULIB_ROUND@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
235 # if !@HAVE_DECL_ROUND@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
236 # define round rpl_round |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
237 extern double round (double x); |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
238 # endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
239 #elif defined GNULIB_POSIXCHECK |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
240 # undef round |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
241 # define round(x) \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
242 (GL_LINK_WARNING ("round is unportable - " \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
243 "use gnulib module round for portability"), \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
244 round (x)) |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
245 #endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
246 |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
247 |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
248 #if @GNULIB_ROUNDL@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
249 # if !@HAVE_DECL_ROUNDL@ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
250 # define roundl rpl_roundl |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
251 extern long double roundl (long double x); |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
252 # endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
253 #elif defined GNULIB_POSIXCHECK |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
254 # undef roundl |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
255 # define roundl(x) \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
256 (GL_LINK_WARNING ("roundl is unportable - " \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
257 "use gnulib module roundl for portability"), \ |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
258 roundl (x)) |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
259 #endif |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
260 |
96fea5b2eb11
Implement 'round', 'roundf', 'roundl' modules.
Ben Pfaff <blp@cs.stanford.edu>
parents:
9312
diff
changeset
|
261 |
9255 | 262 #if @GNULIB_MATHL@ || !@HAVE_DECL_SINL@ |
263 extern long double sinl (long double x); | |
264 #endif | |
265 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
266 # undef sinl | |
267 # define sinl(x) \ | |
268 (GL_LINK_WARNING ("sinl is unportable - " \ | |
269 "use gnulib module mathl for portability"), \ | |
270 sinl (x)) | |
271 #endif | |
272 | |
9285 | 273 |
9255 | 274 #if @GNULIB_MATHL@ || !@HAVE_DECL_SQRTL@ |
275 extern long double sqrtl (long double x); | |
276 #endif | |
277 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
278 # undef sqrtl | |
279 # define sqrtl(x) \ | |
280 (GL_LINK_WARNING ("sqrtl is unportable - " \ | |
281 "use gnulib module mathl for portability"), \ | |
282 sqrtl (x)) | |
283 #endif | |
284 | |
9285 | 285 |
9255 | 286 #if @GNULIB_MATHL@ || !@HAVE_DECL_TANL@ |
287 extern long double tanl (long double x); | |
288 #endif | |
289 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
290 # undef tanl | |
291 # define tanl(x) \ | |
292 (GL_LINK_WARNING ("tanl is unportable - " \ | |
293 "use gnulib module mathl for portability"), \ | |
294 tanl (x)) | |
295 #endif | |
296 | |
9285 | 297 |
298 #if @GNULIB_TRUNCF@ | |
299 # if !@HAVE_DECL_TRUNCF@ | |
300 # define truncf rpl_truncf | |
301 extern float truncf (float x); | |
302 # endif | |
303 #elif defined GNULIB_POSIXCHECK | |
304 # undef truncf | |
305 # define truncf(x) \ | |
306 (GL_LINK_WARNING ("truncf is unportable - " \ | |
307 "use gnulib module truncf for portability"), \ | |
308 truncf (x)) | |
309 #endif | |
310 | |
9282 | 311 #if @GNULIB_TRUNC@ |
312 # if !@HAVE_DECL_TRUNC@ | |
313 # define trunc rpl_trunc | |
314 extern double trunc (double x); | |
315 # endif | |
316 #elif defined GNULIB_POSIXCHECK | |
317 # undef trunc | |
318 # define trunc(x) \ | |
319 (GL_LINK_WARNING ("trunc is unportable - " \ | |
320 "use gnulib module trunc for portability"), \ | |
321 trunc (x)) | |
322 #endif | |
323 | |
9287 | 324 #if @GNULIB_TRUNCL@ |
325 # if !@HAVE_DECL_TRUNCL@ | |
326 # define truncl rpl_truncl | |
327 extern long double truncl (long double x); | |
328 # endif | |
329 #elif defined GNULIB_POSIXCHECK | |
330 # undef truncl | |
331 # define truncl(x) \ | |
332 (GL_LINK_WARNING ("truncl is unportable - " \ | |
333 "use gnulib module truncl for portability"), \ | |
334 truncl (x)) | |
335 #endif | |
336 | |
9255 | 337 |
338 #if @GNULIB_SIGNBIT@ | |
339 # if @REPLACE_SIGNBIT@ | |
340 # undef signbit | |
341 extern int gl_signbitf (float arg); | |
342 extern int gl_signbitd (double arg); | |
343 extern int gl_signbitl (long double arg); | |
344 # if __GNUC__ >= 2 && !__STRICT_ANSI__ | |
345 # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT | |
346 # define gl_signbitf(arg) \ | |
347 ({ union { float _value; \ | |
348 unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
349 } _m; \ | |
350 _m._value = (arg); \ | |
351 (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ | |
352 }) | |
353 # endif | |
354 # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT | |
355 # define gl_signbitd(arg) \ | |
356 ({ union { double _value; \ | |
357 unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
358 } _m; \ | |
359 _m._value = (arg); \ | |
360 (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ | |
361 }) | |
362 # endif | |
363 # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT | |
364 # define gl_signbitl(arg) \ | |
365 ({ union { long double _value; \ | |
366 unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
367 } _m; \ | |
368 _m._value = (arg); \ | |
369 (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ | |
370 }) | |
371 # endif | |
372 # endif | |
373 # define signbit(x) \ | |
374 (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ | |
375 sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ | |
376 gl_signbitf (x)) | |
377 # endif | |
378 #elif defined GNULIB_POSIXCHECK | |
379 /* How to override a macro? */ | |
380 #endif | |
381 | |
382 | |
383 #ifdef __cplusplus | |
384 } | |
385 #endif | |
386 | |
387 #endif /* _GL_MATH_H */ | |
388 #endif /* _GL_MATH_H */ |