Mercurial > hg > octave-kai > gnulib-hg
annotate lib/math.in.h @ 9309:bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 07 Oct 2007 19:14:58 +0200 |
parents | 3191943555eb |
children | bec01fc15c2f |
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. | |
41 Store exp and return mantissa. */ | |
42 #if @GNULIB_FREXP@ | |
43 # if @REPLACE_FREXP@ | |
44 # define frexp rpl_frexp | |
45 extern double frexp (double x, int *exp); | |
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. | |
176 Store exp and return mantissa. */ | |
177 #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ | |
178 # define frexpl rpl_frexpl | |
179 #endif | |
180 #if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || !@HAVE_DECL_FREXPL@ | |
181 extern long double frexpl (long double x, int *exp); | |
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 |
9255 | 220 #if @GNULIB_MATHL@ || !@HAVE_DECL_SINL@ |
221 extern long double sinl (long double x); | |
222 #endif | |
223 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
224 # undef sinl | |
225 # define sinl(x) \ | |
226 (GL_LINK_WARNING ("sinl is unportable - " \ | |
227 "use gnulib module mathl for portability"), \ | |
228 sinl (x)) | |
229 #endif | |
230 | |
9285 | 231 |
9255 | 232 #if @GNULIB_MATHL@ || !@HAVE_DECL_SQRTL@ |
233 extern long double sqrtl (long double x); | |
234 #endif | |
235 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
236 # undef sqrtl | |
237 # define sqrtl(x) \ | |
238 (GL_LINK_WARNING ("sqrtl is unportable - " \ | |
239 "use gnulib module mathl for portability"), \ | |
240 sqrtl (x)) | |
241 #endif | |
242 | |
9285 | 243 |
9255 | 244 #if @GNULIB_MATHL@ || !@HAVE_DECL_TANL@ |
245 extern long double tanl (long double x); | |
246 #endif | |
247 #if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK | |
248 # undef tanl | |
249 # define tanl(x) \ | |
250 (GL_LINK_WARNING ("tanl is unportable - " \ | |
251 "use gnulib module mathl for portability"), \ | |
252 tanl (x)) | |
253 #endif | |
254 | |
9285 | 255 |
256 #if @GNULIB_TRUNCF@ | |
257 # if !@HAVE_DECL_TRUNCF@ | |
258 # define truncf rpl_truncf | |
259 extern float truncf (float x); | |
260 # endif | |
261 #elif defined GNULIB_POSIXCHECK | |
262 # undef truncf | |
263 # define truncf(x) \ | |
264 (GL_LINK_WARNING ("truncf is unportable - " \ | |
265 "use gnulib module truncf for portability"), \ | |
266 truncf (x)) | |
267 #endif | |
268 | |
9282 | 269 #if @GNULIB_TRUNC@ |
270 # if !@HAVE_DECL_TRUNC@ | |
271 # define trunc rpl_trunc | |
272 extern double trunc (double x); | |
273 # endif | |
274 #elif defined GNULIB_POSIXCHECK | |
275 # undef trunc | |
276 # define trunc(x) \ | |
277 (GL_LINK_WARNING ("trunc is unportable - " \ | |
278 "use gnulib module trunc for portability"), \ | |
279 trunc (x)) | |
280 #endif | |
281 | |
9287 | 282 #if @GNULIB_TRUNCL@ |
283 # if !@HAVE_DECL_TRUNCL@ | |
284 # define truncl rpl_truncl | |
285 extern long double truncl (long double x); | |
286 # endif | |
287 #elif defined GNULIB_POSIXCHECK | |
288 # undef truncl | |
289 # define truncl(x) \ | |
290 (GL_LINK_WARNING ("truncl is unportable - " \ | |
291 "use gnulib module truncl for portability"), \ | |
292 truncl (x)) | |
293 #endif | |
294 | |
9255 | 295 |
296 #if @GNULIB_SIGNBIT@ | |
297 # if @REPLACE_SIGNBIT@ | |
298 # undef signbit | |
299 extern int gl_signbitf (float arg); | |
300 extern int gl_signbitd (double arg); | |
301 extern int gl_signbitl (long double arg); | |
302 # if __GNUC__ >= 2 && !__STRICT_ANSI__ | |
303 # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT | |
304 # define gl_signbitf(arg) \ | |
305 ({ union { float _value; \ | |
306 unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
307 } _m; \ | |
308 _m._value = (arg); \ | |
309 (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ | |
310 }) | |
311 # endif | |
312 # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT | |
313 # define gl_signbitd(arg) \ | |
314 ({ union { double _value; \ | |
315 unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
316 } _m; \ | |
317 _m._value = (arg); \ | |
318 (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ | |
319 }) | |
320 # endif | |
321 # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT | |
322 # define gl_signbitl(arg) \ | |
323 ({ union { long double _value; \ | |
324 unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ | |
325 } _m; \ | |
326 _m._value = (arg); \ | |
327 (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ | |
328 }) | |
329 # endif | |
330 # endif | |
331 # define signbit(x) \ | |
332 (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ | |
333 sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ | |
334 gl_signbitf (x)) | |
335 # endif | |
336 #elif defined GNULIB_POSIXCHECK | |
337 /* How to override a macro? */ | |
338 #endif | |
339 | |
340 | |
341 #ifdef __cplusplus | |
342 } | |
343 #endif | |
344 | |
345 #endif /* _GL_MATH_H */ | |
346 #endif /* _GL_MATH_H */ |