2 // Copyright (C) 2000, 2001, Intel Corporation
3 // All rights reserved.
5 // Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, James
6 // Edwards, and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation.
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
15 // * Redistributions in binary form must reproduce the above copyright
16 // notice, this list of conditions and the following disclaimer in the
17 // documentation and/or other materials provided with the distribution.
19 // * The name of Intel Corporation may not be used to endorse or promote
20 // products derived from this software without specific prior written
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
27 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
31 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
32 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 // Intel Corporation is the author of this code, and requests that all
36 // problem reports or change requests be submitted to it directly at
37 // http://developer.intel.com/opensource.
40 //==============================================================
41 // 2/02/00: Initial version
42 // 3/22/00: Updated to support flexible and dynamic error handling.
43 // 8/16/00: Changed all matherr function-calls to use the pmatherr
45 // 10/03/00: Corrected a scalb type.
46 // 11/28/00: Changed INPUT_XL to INPUT_XD for scalb_underflow case.
47 // 12/07/00: Added code to make scalbn error support equivalent to ldexp.
48 // 2/07/01: Added __declspec(align(16)) to long double constants to correct
55 #include "libm_support.h"
59 #if defined( __POSIX__ )
60 _LIB_VERSION
= _POSIX_
;
61 #elif defined( __XOPEN__ )
62 _LIB_VERSION
= _XOPEN_
;
63 #elif defined( __SVID__ )
64 _LIB_VERSION
= _SVID_
;
65 #elif defined( __IEEE__ )
66 _LIB_VERSION
= _IEEE_
;
68 _LIB_VERSION
= _ISOC_
;
72 /************************************************************/
73 /* matherrX function pointers and setusermatherrX functions */
74 /************************************************************/
76 int (*pmatherrf
)(struct exceptionf
*) = MATHERR_F
;
77 int (*pmatherr
)(struct EXC_DECL_D
*) = MATHERR_D
;
78 int (*pmatherrl
)(struct exceptionl
*) = matherrl
;
80 void __libm_setusermatherrf( int(*user_merrf
)(struct exceptionf
*) )
81 { pmatherrf
= ( (user_merrf
==NULL
)? (MATHERR_F
) : (user_merrf
) ); }
83 void __libm_setusermatherr( int(*user_merr
)(struct EXC_DECL_D
*) )
84 { pmatherr
= ( (user_merr
==NULL
)? (MATHERR_D
) : (user_merr
) ); }
86 void __libm_setusermatherrl( int(*user_merrl
)(struct exceptionl
*) )
87 { pmatherrl
= ( (user_merrl
==NULL
)? (matherrl
) : (user_merrl
) ); }
90 /***********************************************/
91 /* error-handling function, libm_error_support */
92 /***********************************************/
93 void __libm_error_support(void *arg1
,void *arg2
,void *retval
,error_types input_tag
)
98 struct __exception exc
;
100 struct exception exc
;
103 struct exceptionf excf
;
104 struct exceptionl excl
;
106 # if defined opensource || defined _LIBC
108 #define ALIGNATTR __attribute__ ((__aligned__ (16)))
110 #define ALIGNIT __declspec(align(16))
114 const char float_inf
[4] = {0x00,0x00,0x80,0x7F};
115 const char float_huge
[4] = {0xFF,0xFF,0x7F,0x7F};
116 const char float_zero
[4] = {0x00,0x00,0x00,0x00};
117 const char float_neg_inf
[4] = {0x00,0x00,0x80,0xFF};
118 const char float_neg_huge
[4] = {0xFF,0xFF,0x7F,0xFF};
119 const char float_neg_zero
[4] = {0x00,0x00,0x00,0x80};
121 const char double_inf
[8] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F};
123 //const char double_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x7F};
125 const char double_zero
[8] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
127 const char double_neg_inf
[8] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF};
129 //const char double_neg_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF};
131 const char double_neg_zero
[8] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};
133 const char long_double_inf
[16] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00};
135 //const char long_double_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00};
137 const char long_double_zero
[16] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
139 const char long_double_neg_inf
[16] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};
141 //const char long_double_neg_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};
143 const char long_double_neg_zero
[16] ALIGNATTR
= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00};
145 #define RETVAL_HUGE_VALL *(long double *)retval = *(long double *)long_double_inf
146 #define RETVAL_NEG_HUGE_VALL *(long double *)retval = *(long double *)long_double_neg_inf
147 #define RETVAL_HUGEL *(long double *)retval = (long double)*(float *)float_huge
148 #define RETVAL_NEG_HUGEL *(long double *)retval =(long double)*(float*)float_neg_huge
150 #define RETVAL_HUGE_VALD *(double *)retval = *(double *) double_inf
151 #define RETVAL_NEG_HUGE_VALD *(double *)retval = *(double *) double_neg_inf
152 #define RETVAL_HUGED *(double *)retval = (double) *(float *)float_huge
153 #define RETVAL_NEG_HUGED *(double *)retval = (double) *(float *) float_neg_huge
155 #define RETVAL_HUGE_VALF *(float *)retval = *(float *) float_inf
156 #define RETVAL_NEG_HUGE_VALF *(float *)retval = *(float *) float_neg_inf
157 #define RETVAL_HUGEF *(float *)retval = *(float *) float_huge
158 #define RETVAL_NEG_HUGEF *(float *)retval = *(float *) float_neg_huge
160 #define RETVAL_ZEROL *(long double *)retval = *(long double *)long_double_zero
161 #define RETVAL_ZEROD *(double *)retval = *(double *)double_zero
162 #define RETVAL_ZEROF *(float *)retval = *(float *)float_zero
164 #define RETVAL_NEG_ZEROL *(long double *)retval = *(long double *)long_double_neg_zero
165 #define RETVAL_NEG_ZEROD *(double *)retval = *(double *)double_neg_zero
166 #define RETVAL_NEG_ZEROF *(float *)retval = *(float *)float_neg_zero
168 #define RETVAL_ONEL *(long double *)retval = (long double) 1.0
169 #define RETVAL_ONED *(double *)retval = 1.0
170 #define RETVAL_ONEF *(float *)retval = 1.0f
172 #define NOT_MATHERRL excl.arg1=*(long double *)arg1;excl.arg2=*(long double *)arg2;excl.retval=*(long double *)retval;if(!matherrl(&excl))
173 #define NOT_MATHERRD exc.arg1=*(double *)arg1;exc.arg2=*(double *)arg2;exc.retval=*(double *)retval;if(!MATHERR_D(&exc))
174 #define NOT_MATHERRF excf.arg1=*(float *)arg1;excf.arg2=*(float *)arg2;excf.retval=*(float *)retval;if(!MATHERR_F(&excf))
176 #define ifSVID if(_LIB_VERSION==_SVID_)
178 #define NAMEL excl.name
179 #define NAMED exc.name
180 #define NAMEF excf.name
183 // These should work OK for MS because they are ints -
184 // leading underbars are not necessary.
194 #define SINGL excl.type = SING
195 #define DOMAINL excl.type = DOMAIN
196 #define OVERFLOWL excl.type = OVERFLOW
197 #define UNDERFLOWL excl.type = UNDERFLOW
198 #define TLOSSL excl.type = TLOSS
199 #define SINGD exc.type = SING
200 #define DOMAIND exc.type = DOMAIN
201 #define OVERFLOWD exc.type = OVERFLOW
202 #define UNDERFLOWD exc.type = UNDERFLOW
203 #define TLOSSD exc.type = TLOSS
204 #define SINGF excf.type = SING
205 #define DOMAINF excf.type = DOMAIN
206 #define OVERFLOWF excf.type = OVERFLOW
207 #define UNDERFLOWF excf.type = UNDERFLOW
208 #define TLOSSF excf.type = TLOSS
210 #define INPUT_XL (excl.arg1=*(long double*)arg1)
211 #define INPUT_XD (exc.arg1=*(double*)arg1)
212 #define INPUT_XF (excf.arg1=*(float*)arg1)
213 #define INPUT_YL (excl.arg1=*(long double*)arg2)
214 #define INPUT_YD (exc.arg1=*(double*)arg2)
215 #define INPUT_YF (excf.arg1=*(float*)arg2)
216 #define INPUT_RESL (*(long double *)retval)
217 #define INPUT_RESD (*(double *)retval)
218 #define INPUT_RESF (*(float *)retval)
220 #define WRITEL_LOG_ZERO fputs("logl: SING error\n",stderr)
221 #define WRITED_LOG_ZERO fputs("log: SING error\n",stderr)
222 #define WRITEF_LOG_ZERO fputs("logf: SING error\n",stderr)
223 #define WRITEL_LOG_NEGATIVE fputs("logl: DOMAIN error\n",stderr)
224 #define WRITED_LOG_NEGATIVE fputs("log: DOMAIN error\n",stderr)
225 #define WRITEF_LOG_NEGATIVE fputs("logf: DOMAIN error\n",stderr)
226 #define WRITEL_Y0_ZERO fputs("y0l: DOMAIN error\n",stderr)
227 #define WRITED_Y0_ZERO fputs("y0: DOMAIN error\n",stderr)
228 #define WRITEF_Y0_ZERO fputs("y0f: DOMAIN error\n",stderr)
229 #define WRITEL_Y0_NEGATIVE fputs("y0l: DOMAIN error\n",stderr)
230 #define WRITED_Y0_NEGATIVE fputs("y0: DOMAIN error\n",stderr)
231 #define WRITEF_Y0_NEGATIVE fputs("y0f: DOMAIN error\n",stderr)
232 #define WRITEL_Y1_ZERO fputs("y1l: DOMAIN error\n",stderr)
233 #define WRITED_Y1_ZERO fputs("y1: DOMAIN error\n",stderr)
234 #define WRITEF_Y1_ZERO fputs("y1f: DOMAIN error\n",stderr)
235 #define WRITEL_Y1_NEGATIVE fputs("y1l: DOMAIN error\n",stderr)
236 #define WRITED_Y1_NEGATIUE fputs("y1: DOMAIN error\n",stderr)
237 #define WRITEF_Y1_NEGATIVE fputs("y1f: DOMAIN error\n",stderr)
238 #define WRITEL_YN_ZERO fputs("ynl: DOMAIN error\n",stderr)
239 #define WRITED_YN_ZERO fputs("yn: DOMAIN error\n",stderr)
240 #define WRITEF_YN_ZERO fputs("ynf: DOMAIN error\n",stderr)
241 #define WRITEL_YN_NEGATIVE fputs("ynl: DOMAIN error\n",stderr)
242 #define WRITED_YN_NEGATIVE fputs("yn: DOMAIN error\n",stderr)
243 #define WRITEF_YN_NEGATIVE fputs("ynf: DOMAIN error\n",stderr)
244 #define WRITEL_LOG1P_ZERO fputs("log1pl: SING error\n",stderr)
245 #define WRITED_LOG1P_ZERO fputs("log1p: SING error\n",stderr)
246 #define WRITEF_LOG1P_ZERO fputs("log1pf: SING error\n",stderr)
247 #define WRITEL_LOG1P_NEGATIVE fputs("log1pl: DOMAIN error\n",stderr)
248 #define WRITED_LOG1P_NEGATIVE fputs("log1p: DOMAIN error\n",stderr)
249 #define WRITEF_LOG1P_NEGATIVE fputs("log1pf: DOMAIN error\n",stderr)
250 #define WRITEL_LOG10_ZERO fputs("log10l: SING error\n",stderr)
251 #define WRITED_LOG10_ZERO fputs("log10: SING error\n",stderr)
252 #define WRITEF_LOG10_ZERO fputs("log10f: SING error\n",stderr)
253 #define WRITEL_LOG10_NEGATIVE fputs("log10l: DOMAIN error\n",stderr)
254 #define WRITED_LOG10_NEGATIVE fputs("log10: DOMAIN error\n",stderr)
255 #define WRITEF_LOG10_NEGATIVE fputs("log10f: DOMAIN error\n",stderr)
256 #define WRITEL_POW_ZERO_TO_ZERO fputs("powl(0,0): DOMAIN error\n",stderr)
257 #define WRITED_POW_ZERO_TO_ZERO fputs("pow(0,0): DOMAIN error\n",stderr)
258 #define WRITEF_POW_ZERO_TO_ZERO fputs("powf(0,0): DOMAIN error\n",stderr)
259 #define WRITEL_POW_ZERO_TO_NEGATIVE fputs("powl(0,negative): DOMAIN error\n",stderr)
260 #define WRITED_POW_ZERO_TO_NEGATIVE fputs("pow(0,negative): DOMAIN error\n",stderr)
261 #define WRITEF_POW_ZERO_TO_NEGATIVE fputs("powf(0,negative): DOMAIN error\n",stderr)
262 #define WRITEL_POW_NEG_TO_NON_INTEGER fputs("powl(negative,non-integer): DOMAIN error\n",stderr)
263 #define WRITED_POW_NEG_TO_NON_INTEGER fputs("pow(negative,non-integer): DOMAIN error\n",stderr)
264 #define WRITEF_POW_NEG_TO_NON_INTEGER fputs("powf(negative,non-integer): DOMAIN error\n",stderr)
265 #define WRITEL_ATAN2_ZERO_BY_ZERO fputs("atan2l: DOMAIN error\n",stderr)
266 #define WRITED_ATAN2_ZERO_BY_ZERO fputs("atan2: DOMAIN error\n",stderr)
267 #define WRITEF_ATAN2_ZERO_BY_ZERO fputs("atan2f: DOMAIN error\n",stderr)
268 #define WRITEL_SQRT fputs("sqrtl: DOMAIN error\n",stderr)
269 #define WRITED_SQRT fputs("sqrt: DOMAIN error\n",stderr)
270 #define WRITEF_SQRT fputs("sqrtf: DOMAIN error\n",stderr)
271 #define WRITEL_FMOD fputs("fmodl: DOMAIN error\n",stderr)
272 #define WRITED_FMOD fputs("fmod: DOMAIN error\n",stderr)
273 #define WRITEF_FMOD fputs("fmodf: DOMAIN error\n",stderr)
274 #define WRITEL_REM fputs("remainderl: DOMAIN error\n",stderr)
275 #define WRITED_REM fputs("remainder: DOMAIN error\n",stderr)
276 #define WRITEF_REM fputs("remainderf: DOMAIN error\n",stderr)
277 #define WRITEL_ACOS fputs("acosl: DOMAIN error\n",stderr)
278 #define WRITED_ACOS fputs("acos: DOMAIN error\n",stderr)
279 #define WRITEF_ACOS fputs("acosf: DOMAIN error\n",stderr)
280 #define WRITEL_ASIN fputs("asinl: DOMAIN error\n",stderr)
281 #define WRITED_ASIN fputs("asin: DOMAIN error\n",stderr)
282 #define WRITEF_ASIN fputs("asinf: DOMAIN error\n",stderr)
283 #define WRITEL_ACOSH fputs("acoshl: DOMAIN error\n",stderr)
284 #define WRITED_ACOSH fputs("acosh: DOMAIN error\n",stderr)
285 #define WRITEF_ACOSH fputs("acoshf: DOMAIN error\n",stderr)
286 #define WRITEL_ATANH_GT_ONE fputs("atanhl: DOMAIN error\n",stderr)
287 #define WRITED_ATANH_GT_ONE fputs("atanh: DOMAIN error\n",stderr)
288 #define WRITEF_ATANH_GT_ONE fputs("atanhf: DOMAIN error\n",stderr)
289 #define WRITEL_ATANH_EQ_ONE fputs("atanhl: SING error\n",stderr)
290 #define WRITED_ATANH_EQ_ONE fputs("atanh: SING error\n",stderr)
291 #define WRITEF_ATANH_EQ_ONE fputs("atanhf: SING error\n",stderr)
292 #define WRITEL_LGAMMA_NEGATIVE fputs("lgammal: SING error\n",stderr)
293 #define WRITED_LGAMMA_NEGATIVE fputs("lgamma: SING error\n",stderr)
294 #define WRITEF_LGAMMA_NEGATIVE fputs("lgammaf: SING error\n",stderr)
295 #define WRITEL_GAMMA_NEGATIVE fputs("gammal: SING error\n",stderr)
296 #define WRITED_GAMMA_NEGATIVE fputs("gamma: SING error\n",stderr)
297 #define WRITEF_GAMMA_NEGATIVE fputs("gammaf: SING error\n",stderr)
298 #define WRITEL_J0_TLOSS fputs("j0l: TLOSS error\n",stderr)
299 #define WRITEL_Y0_TLOSS fputs("y0l: TLOSS error\n",stderr)
300 #define WRITEL_J1_TLOSS fputs("j1l: TLOSS error\n",stderr)
301 #define WRITEL_Y1_TLOSS fputs("y1l: TLOSS error\n",stderr)
302 #define WRITEL_JN_TLOSS fputs("jnl: TLOSS error\n",stderr)
303 #define WRITEL_YN_TLOSS fputs("ynl: TLOSS error\n",stderr)
304 #define WRITED_J0_TLOSS fputs("j0: TLOSS error\n",stderr)
305 #define WRITED_Y0_TLOSS fputs("y0: TLOSS error\n",stderr)
306 #define WRITED_J1_TLOSS fputs("j1: TLOSS error\n",stderr)
307 #define WRITED_Y1_TLOSS fputs("y1: TLOSS error\n",stderr)
308 #define WRITED_JN_TLOSS fputs("jn: TLOSS error\n",stderr)
309 #define WRITED_YN_TLOSS fputs("yn: TLOSS error\n",stderr)
310 #define WRITEF_J0_TLOSS fputs("j0f: TLOSS error\n",stderr)
311 #define WRITEF_Y0_TLOSS fputs("y0f: TLOSS error\n",stderr)
312 #define WRITEF_J1_TLOSS fputs("j1f: TLOSS error\n",stderr)
313 #define WRITEF_Y1_TLOSS fputs("y1f: TLOSS error\n",stderr)
314 #define WRITEF_JN_TLOSS fputs("jnf: TLOSS error\n",stderr)
315 #define WRITEF_YN_TLOSS fputs("ynf: TLOSS error\n",stderr)
317 /***********************/
319 /***********************/
320 if(_LIB_VERSION
==_IEEE_
) return;
322 /***********************/
324 /***********************/
325 else if(_LIB_VERSION
==_ISOC_
)
356 case exp2l_underflow
:
358 case exp2f_underflow
:
359 case exp10l_overflow
:
361 case exp10f_overflow
:
362 case expm1l_overflow
:
364 case expm1f_overflow
:
365 case hypotl_overflow
:
367 case hypotf_overflow
:
374 case scalbl_overflow
:
376 case scalbf_overflow
:
377 case scalbl_underflow
:
378 case scalb_underflow
:
379 case scalbf_underflow
:
383 case nextafterl_overflow
:
384 case nextafter_overflow
:
385 case nextafterf_overflow
:
386 case scalbnl_overflow
:
387 case scalbn_overflow
:
388 case scalbnf_overflow
:
389 case scalbnl_underflow
:
390 case scalbn_underflow
:
391 case scalbnf_underflow
:
392 case ldexpl_overflow
:
394 case ldexpf_overflow
:
395 case ldexpl_underflow
:
396 case ldexp_underflow
:
397 case ldexpf_underflow
:
398 case lgammal_overflow
:
399 case lgamma_overflow
:
400 case lgammaf_overflow
:
401 case lgammal_negative
:
402 case lgamma_negative
:
403 case lgammaf_negative
:
404 case gammal_overflow
:
406 case gammaf_overflow
:
407 case gammal_negative
:
409 case gammaf_negative
:
419 case log10l_negative
:
421 case log10f_negative
:
425 case log1pl_negative
:
427 case log1pf_negative
:
434 case powl_zero_to_negative
:
435 case powl_neg_to_non_integer
:
436 case pow_zero_to_negative
:
437 case pow_neg_to_non_integer
:
438 case powf_zero_to_negative
:
439 case powf_neg_to_non_integer
:
485 /***********************/
487 /***********************/
489 else if(_LIB_VERSION
==_POSIX_
)
493 case gammal_overflow
:
494 case lgammal_overflow
:
496 RETVAL_HUGE_VALL
; ERRNO_RANGE
; break;
499 case lgamma_overflow
:
501 RETVAL_HUGE_VALD
; ERRNO_RANGE
; break;
503 case gammaf_overflow
:
504 case lgammaf_overflow
:
506 RETVAL_HUGE_VALF
; ERRNO_RANGE
; break;
508 case gammal_negative
:
510 case gammaf_negative
:
511 case lgammal_negative
:
512 case lgamma_negative
:
513 case lgammaf_negative
:
517 case ldexpl_overflow
:
518 case ldexpl_underflow
:
520 case ldexp_underflow
:
521 case ldexpf_overflow
:
522 case ldexpf_underflow
:
523 case scalbnl_overflow
:
524 case scalbnl_underflow
:
525 case scalbn_overflow
:
526 case scalbn_underflow
:
527 case scalbnf_overflow
:
528 case scalbnf_underflow
:
534 /* atanhl(|x| >= 1) */
540 /* atanh(|x| >= 1) */
546 /* atanhf(|x| >= 1) */
572 RETVAL_NEG_HUGE_VALL
; ERRNO_DOMAIN
; break;
581 RETVAL_NEG_HUGE_VALD
; ERRNO_DOMAIN
; break;
590 RETVAL_NEG_HUGE_VALF
; ERRNO_DOMAIN
; break;
599 RETVAL_NEG_HUGE_VALL
; ERRNO_DOMAIN
; break;
608 RETVAL_NEG_HUGE_VALD
; ERRNO_DOMAIN
; break;
617 RETVAL_NEG_HUGE_VALF
; ERRNO_DOMAIN
; break;
626 RETVAL_NEG_HUGE_VALL
; ERRNO_RANGE
; break;
636 RETVAL_NEG_HUGE_VALD
; ERRNO_RANGE
; break;
645 RETVAL_NEG_HUGE_VALF
; ERRNO_RANGE
; break;
648 case log1pl_negative
:
649 case log10l_negative
:
668 case log1pf_negative
:
669 case log10f_negative
:
680 RETVAL_HUGE_VALL
; ERRNO_RANGE
; break;
685 RETVAL_HUGE_VALD
; ERRNO_RANGE
; break;
690 RETVAL_HUGE_VALF
; ERRNO_RANGE
; break;
695 RETVAL_ZEROL
; ERRNO_RANGE
; break;
700 RETVAL_ZEROD
; ERRNO_RANGE
; break;
705 RETVAL_ZEROF
; ERRNO_RANGE
; break;
713 /* jn and yn doubl-extended> XLOSS */
715 RETVAL_ZEROL
; ERRNO_RANGE
; break;
723 /* jn and yn double > XLOSS */
725 RETVAL_ZEROD
; ERRNO_RANGE
; break;
733 /* j0n and y0n > XLOSS */
735 RETVAL_ZEROF
; ERRNO_RANGE
; break;
737 case powl_zero_to_zero
:
742 case pow_zero_to_zero
:
747 case powf_zero_to_zero
:
753 /* powl(x,y) overflow */
755 if (INPUT_RESL
< 0) RETVAL_NEG_HUGE_VALL
;
756 else RETVAL_HUGE_VALL
;
760 /* pow(x,y) overflow */
762 if (INPUT_RESD
< 0) RETVAL_NEG_HUGE_VALD
;
763 else RETVAL_HUGE_VALD
;
767 /* powf(x,y) overflow */
769 if (INPUT_RESF
< 0) RETVAL_NEG_HUGE_VALF
;
770 else RETVAL_HUGE_VALF
;
774 /* powl(x,y) underflow */
776 RETVAL_ZEROL
; ERRNO_RANGE
; break;
779 /* pow(x,y) underflow */
781 RETVAL_ZEROD
; ERRNO_RANGE
; break;
784 /* powf(x,y) underflow */
786 RETVAL_ZEROF
; ERRNO_RANGE
; break;
788 case powl_zero_to_negative
:
793 case pow_zero_to_negative
:
798 case powf_zero_to_negative
:
803 case powl_neg_to_non_integer
:
804 /* neg**non_integral */
808 case pow_neg_to_non_integer
:
809 /* neg**non_integral */
813 case powf_neg_to_non_integer
:
814 /* neg**non-integral */
818 case powl_nan_to_zero
:
824 case pow_nan_to_zero
:
829 case powf_nan_to_zero
:
837 /* XXX arg1 and arg2 are switched!!!! */
838 if (signbit (*(long double *) arg1
))
840 *(long double *) retval
= copysignl (M_PIl
, *(long double *) arg2
);
842 *(long double *) retval
= *(long double *) arg2
;
848 /* XXX arg1 and arg2 are switched!!!! */
849 if (signbit (*(double *) arg1
))
851 *(double *) retval
= copysign (M_PI
, *(double *) arg2
);
853 *(double *) retval
= *(double *) arg2
;
860 if (signbit (*(float *) arg2
))
862 *(float *) retval
= copysignf (M_PI
, *(float *) arg1
);
864 *(float *) retval
= *(float *) arg1
;
867 case expm1l_overflow
:
877 case expm1f_overflow
:
878 /* expm1f overflow */
882 case expm1l_underflow
:
883 /* expm1 underflow */
887 case expm1_underflow
:
888 /* expm1 underflow */
892 case expm1f_underflow
:
893 /* expm1f underflow */
897 case hypotl_overflow
:
898 /* hypotl overflow */
900 RETVAL_HUGE_VALL
; ERRNO_RANGE
; break;
905 RETVAL_HUGE_VALD
; ERRNO_RANGE
; break;
907 case hypotf_overflow
:
908 /* hypotf overflow */
910 RETVAL_HUGE_VALF
; ERRNO_RANGE
; break;
912 case scalbl_underflow
:
913 /* scalbl underflow */
915 if (INPUT_XL
< 0) RETVAL_NEG_ZEROL
;
919 case scalb_underflow
:
920 /* scalb underflow */
922 if (INPUT_XD
< 0) RETVAL_NEG_ZEROD
;
926 case scalbf_underflow
:
927 /* scalbf underflow */
929 if (INPUT_XF
< 0) RETVAL_NEG_ZEROF
;
933 case scalbl_overflow
:
934 /* scalbl overflow */
936 if (INPUT_XL
< 0) RETVAL_NEG_HUGE_VALL
;
937 else RETVAL_HUGE_VALL
;
943 if (INPUT_XD
< 0) RETVAL_NEG_HUGE_VALD
;
944 else RETVAL_HUGE_VALD
;
947 case scalbf_overflow
:
948 /* scalbf overflow */
950 if (INPUT_XF
< 0) RETVAL_NEG_HUGE_VALF
;
951 else RETVAL_HUGE_VALF
;
999 case remainderl_by_zero
:
1003 ERRNO_DOMAIN
; break;
1005 case remainder_by_zero
:
1009 ERRNO_DOMAIN
; break;
1011 case remainderf_by_zero
:
1015 ERRNO_DOMAIN
; break;
1017 case coshl_overflow
:
1018 /* coshl overflows */
1020 RETVAL_HUGE_VALL
; ERRNO_RANGE
; break;
1023 /* cosh overflows */
1025 RETVAL_HUGE_VALD
; ERRNO_RANGE
; break;
1027 case coshf_overflow
:
1028 /* coshf overflows */
1030 RETVAL_HUGE_VALF
; ERRNO_RANGE
; break;
1032 case sinhl_overflow
:
1033 /* sinhl overflows */
1035 if (INPUT_XL
> 0) RETVAL_HUGE_VALL
;
1036 else RETVAL_NEG_HUGE_VALL
;
1040 /* sinh overflows */
1042 if (INPUT_XD
> 0) RETVAL_HUGE_VALD
;
1043 else RETVAL_NEG_HUGE_VALD
;
1046 case sinhf_overflow
:
1047 /* sinhf overflows */
1049 if (INPUT_XF
> 0) RETVAL_HUGE_VALF
;
1050 else RETVAL_NEG_HUGE_VALF
;
1056 ERRNO_DOMAIN
; break;
1061 ERRNO_DOMAIN
; break;
1066 ERRNO_DOMAIN
; break;
1090 /*******************************/
1091 /* __SVID__ and __XOPEN__ Path */
1092 /*******************************/
1097 case ldexpl_overflow
:
1098 case ldexpl_underflow
:
1099 case ldexp_overflow
:
1100 case ldexp_underflow
:
1101 case ldexpf_overflow
:
1102 case ldexpf_underflow
:
1103 case scalbnl_overflow
:
1104 case scalbnl_underflow
:
1105 case scalbn_overflow
:
1106 case scalbn_underflow
:
1107 case scalbnf_overflow
:
1108 case scalbnf_underflow
:
1112 case sqrtl_negative
:
1115 DOMAINL
; NAMEL
= (char *) "sqrtl";
1126 { /* NaN already computed */
1127 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1129 *(long double *)retval
= excl
.retval
;
1135 DOMAIND
; NAMED
= (char *) "sqrt";
1147 { /* NaN already computed */
1148 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1150 *(double *)retval
= exc
.retval
;
1153 case sqrtf_negative
:
1156 DOMAINF
; NAMEF
= (char *) "sqrtf";
1168 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1170 *(float *)retval
= excf
.retval
;
1177 SINGL
; NAMEL
= (char *) "logl";
1189 RETVAL_NEG_HUGE_VALL
;
1190 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1192 *(long double *)retval
= excl
.retval
;
1199 SINGD
; NAMED
= (char *) "log";
1211 RETVAL_NEG_HUGE_VALD
;
1212 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1214 *(double *)retval
= exc
.retval
;
1221 SINGF
; NAMEF
= (char *) "logf";
1233 RETVAL_NEG_HUGE_VALF
;
1234 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1236 *(float *)retval
= excf
.retval
;
1241 case log2l_negative
:
1244 DOMAINL
; NAMEL
= (char *) "logl";
1250 WRITEL_LOG_NEGATIVE
;
1256 RETVAL_NEG_HUGE_VALL
;
1257 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1259 *(long double *)retval
= excl
.retval
;
1266 DOMAIND
; NAMED
= (char *) "log";
1272 WRITED_LOG_NEGATIVE
;
1278 RETVAL_NEG_HUGE_VALD
;
1279 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1281 *(double *)retval
= exc
.retval
;
1285 case log2f_negative
:
1288 DOMAINF
; NAMEF
= (char *) "logf";
1294 WRITEF_LOG_NEGATIVE
;
1300 RETVAL_NEG_HUGE_VALF
;
1301 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1303 *(float *)retval
= excf
.retval
;
1309 SINGL
; NAMEL
= (char *) "log1pl";
1321 RETVAL_NEG_HUGE_VALL
;
1322 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1324 *(long double *)retval
= excl
.retval
;
1330 SINGD
; NAMED
= (char *) "log1p";
1342 RETVAL_NEG_HUGE_VALD
;
1343 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1345 *(double *)retval
= exc
.retval
;
1351 SINGF
; NAMEF
= (char *) "log1pf";
1363 RETVAL_NEG_HUGE_VALF
;
1364 NOT_MATHERRF
{}ERRNO_DOMAIN
;
1366 *(float *)retval
= excf
.retval
;
1369 case log1pl_negative
:
1370 /* log1pl(x < -1) */
1372 DOMAINL
; NAMEL
= (char *) "log1pl";
1378 WRITEL_LOG1P_NEGATIVE
;
1384 RETVAL_NEG_HUGE_VALL
;
1385 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1387 *(long double *)retval
= excl
.retval
;
1390 case log1p_negative
:
1393 DOMAIND
; NAMED
= (char *) "log1p";
1399 WRITED_LOG1P_NEGATIVE
;
1405 RETVAL_NEG_HUGE_VALD
;
1406 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1408 *(double *)retval
= exc
.retval
;
1411 case log1pf_negative
:
1412 /* log1pf(x < -1) */
1414 DOMAINF
; NAMEF
= (char *) "log1pf";
1420 WRITEF_LOG1P_NEGATIVE
;
1426 RETVAL_NEG_HUGE_VALF
;
1427 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1429 *(float *)retval
= excf
.retval
;
1435 SINGL
; NAMEL
= (char *) "log10l";
1447 RETVAL_NEG_HUGE_VALL
;
1448 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1450 *(long double *)retval
= excl
.retval
;
1456 SINGD
; NAMED
= (char *) "log10";
1468 RETVAL_NEG_HUGE_VALD
;
1469 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1471 *(double *)retval
= exc
.retval
;
1477 SINGF
; NAMEF
= (char *) "log10f";
1489 RETVAL_NEG_HUGE_VALF
;
1490 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1492 *(float *)retval
= excf
.retval
;
1495 case log10l_negative
:
1498 DOMAINL
; NAMEL
= (char *) "log10l";
1504 WRITEL_LOG10_NEGATIVE
;
1510 RETVAL_NEG_HUGE_VALL
;
1511 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1513 *(long double *)retval
= excl
.retval
;
1516 case log10_negative
:
1519 DOMAIND
; NAMED
= (char *) "log10";
1525 WRITED_LOG10_NEGATIVE
;
1531 RETVAL_NEG_HUGE_VALD
;
1532 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1534 *(double *)retval
= exc
.retval
;
1537 case log10f_negative
:
1540 DOMAINF
; NAMEF
= (char *) "log10f";
1546 WRITEF_LOG10_NEGATIVE
;
1552 RETVAL_NEG_HUGE_VALF
;
1553 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1555 *(float *)retval
= excf
.retval
;
1561 OVERFLOWL
; NAMEL
= (char *) "expl";
1570 NOT_MATHERRL
{ERRNO_RANGE
;}
1571 *(long double *)retval
= excl
.retval
;
1577 OVERFLOWD
; NAMED
= (char *) "exp";
1586 NOT_MATHERRD
{ERRNO_RANGE
;}
1587 *(double *)retval
= exc
.retval
;
1593 OVERFLOWF
; NAMEF
= (char *) "expf";
1602 NOT_MATHERRF
{ERRNO_RANGE
;}
1603 *(float *)retval
= excf
.retval
;
1606 case expl_underflow
:
1607 /* expl underflow */
1609 UNDERFLOWL
; NAMEL
= (char *) "expl"; RETVAL_ZEROL
;
1610 NOT_MATHERRL
{ERRNO_RANGE
;}
1611 *(long double *)retval
= excl
.retval
;
1617 UNDERFLOWD
; NAMED
= (char *) "exp"; RETVAL_ZEROD
;
1618 NOT_MATHERRD
{ERRNO_RANGE
;}
1619 *(double *)retval
= exc
.retval
;
1622 case expf_underflow
:
1623 /* expf underflow */
1625 UNDERFLOWF
; NAMEF
= (char *) "expf"; RETVAL_ZEROF
;
1626 NOT_MATHERRF
{ERRNO_RANGE
;}
1627 *(float *)retval
= excf
.retval
;
1630 case powl_zero_to_zero
:
1633 DOMAINL
; NAMEL
= (char *) "powl";
1639 WRITEL_POW_ZERO_TO_ZERO
;
1642 *(long double *)retval
= excl
.retval
;
1647 case pow_zero_to_zero
:
1650 DOMAIND
; NAMED
= (char *) "pow";
1656 WRITED_POW_ZERO_TO_ZERO
;
1659 *(double *)retval
= exc
.retval
;
1664 case powf_zero_to_zero
:
1667 DOMAINF
; NAMEF
= (char *) "powf";
1673 WRITEF_POW_ZERO_TO_ZERO
;
1676 *(float *)retval
= excf
.retval
;
1682 /* powl(x,y) overflow */
1684 OVERFLOWL
; NAMEL
= (char *) "powl";
1687 if (INPUT_XL
< 0) RETVAL_NEG_HUGEL
;
1692 if (INPUT_XL
< 0) RETVAL_NEG_HUGE_VALL
;
1693 else RETVAL_HUGE_VALL
;
1695 NOT_MATHERRL
{ERRNO_RANGE
;}
1696 *(long double *)retval
= excl
.retval
;
1700 /* pow(x,y) overflow */
1702 OVERFLOWD
; NAMED
= (char *) "pow";
1705 if (INPUT_XD
< 0) RETVAL_NEG_HUGED
;
1710 if (INPUT_XD
< 0) RETVAL_NEG_HUGE_VALD
;
1711 else RETVAL_HUGE_VALD
;
1713 NOT_MATHERRD
{ERRNO_RANGE
;}
1714 *(double *)retval
= exc
.retval
;
1718 /* powf(x,y) overflow */
1720 OVERFLOWF
; NAMEF
= (char *) "powf";
1723 if (INPUT_XF
< 0) RETVAL_NEG_HUGEF
;
1728 if (INPUT_XF
< 0) RETVAL_NEG_HUGE_VALF
;
1729 else RETVAL_HUGE_VALF
;
1731 NOT_MATHERRF
{ERRNO_RANGE
;}
1732 *(float *)retval
= excf
.retval
;
1735 case powl_underflow
:
1736 /* powl(x,y) underflow */
1738 UNDERFLOWL
; NAMEL
= (char *) "powl"; RETVAL_ZEROL
;
1739 NOT_MATHERRL
{ERRNO_RANGE
;}
1740 *(long double *)retval
= excl
.retval
;
1744 /* pow(x,y) underflow */
1746 UNDERFLOWD
; NAMED
= (char *) "pow"; RETVAL_ZEROD
;
1747 NOT_MATHERRD
{ERRNO_RANGE
;}
1748 *(double *)retval
= exc
.retval
;
1751 case powf_underflow
:
1752 /* powf(x,y) underflow */
1754 UNDERFLOWF
; NAMEF
= (char *) "powf"; RETVAL_ZEROF
;
1755 NOT_MATHERRF
{ERRNO_RANGE
;}
1756 *(float *)retval
= excf
.retval
;
1759 case powl_zero_to_negative
:
1762 DOMAINL
; NAMEL
= (char *) "powl";
1768 WRITEL_POW_ZERO_TO_NEGATIVE
;
1774 RETVAL_NEG_HUGE_VALL
;
1775 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1777 *(long double *)retval
= excl
.retval
;
1780 case pow_zero_to_negative
:
1783 DOMAIND
; NAMED
= (char *) "pow";
1789 WRITED_POW_ZERO_TO_NEGATIVE
;
1795 RETVAL_NEG_HUGE_VALD
;
1796 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1798 *(double *)retval
= exc
.retval
;
1801 case powf_zero_to_negative
:
1804 DOMAINF
; NAMEF
= (char *) "powf";
1805 RETVAL_NEG_HUGE_VALF
;
1811 WRITEF_POW_ZERO_TO_NEGATIVE
;
1817 RETVAL_NEG_HUGE_VALF
;
1818 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1820 *(float *)retval
= excf
.retval
;
1823 case powl_neg_to_non_integer
:
1824 /* neg**non_integral */
1826 DOMAINL
; NAMEL
= (char *) "powl";
1832 WRITEL_POW_NEG_TO_NON_INTEGER
;
1838 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1840 *(long double *)retval
= excl
.retval
;
1843 case pow_neg_to_non_integer
:
1844 /* neg**non_integral */
1846 DOMAIND
; NAMED
= (char *) "pow";
1852 WRITED_POW_NEG_TO_NON_INTEGER
;
1858 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1860 *(double *)retval
= exc
.retval
;
1863 case powf_neg_to_non_integer
:
1864 /* neg**non-integral */
1866 DOMAINF
; NAMEF
= (char *) "powf";
1872 WRITEF_POW_NEG_TO_NON_INTEGER
;
1878 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1880 *(float *)retval
= excf
.retval
;
1883 case powl_nan_to_zero
:
1887 DOMAINL
; NAMEL
= (char *) "powl"; INPUT_XL
; INPUT_YL
;
1888 excl
.retval
= *(long double *)arg1
;
1889 NOT_MATHERRL
{ERRNO_DOMAIN
;}
1890 *(long double *)retval
= excl
.retval
;
1893 case pow_nan_to_zero
:
1897 DOMAIND
; NAMED
= (char *) "pow"; INPUT_XD
; INPUT_YD
;
1898 exc
.retval
= *(double *)arg1
;
1899 NOT_MATHERRD
{ERRNO_DOMAIN
;}
1900 *(double *)retval
= exc
.retval
;
1903 case powf_nan_to_zero
:
1907 DOMAINF
; NAMEF
= (char *) "powf"; INPUT_XF
; INPUT_YF
;
1908 excf
.retval
= *(float *)arg1
;
1909 NOT_MATHERRF
{ERRNO_DOMAIN
;}
1910 *(float *)retval
= excf
.retval
;
1914 /* atan2l(0.0,0.0) */
1916 DOMAINL
; NAMEL
= (char *) "atan2l";
1922 WRITEL_ATAN2_ZERO_BY_ZERO
;
1926 *(long double *)retval
= excl
.retval
;
1930 /* atan2(0.0,0.0) */
1932 DOMAIND
; NAMED
= (char *) "atan2";
1938 WRITED_ATAN2_ZERO_BY_ZERO
;
1942 *(double *)retval
= exc
.retval
;
1946 /* atan2f(0.0,0.0) */
1948 DOMAINF
; NAMEF
= (char *) "atan2f";
1953 WRITEF_ATAN2_ZERO_BY_ZERO
;
1956 *(float *)retval
= excf
.retval
;
1959 case expm1_overflow
:
1960 /* expm1(finite) overflow */
1961 /* Overflow is the only documented */
1962 /* special value. */
1967 case expm1f_overflow
:
1968 /* expm1f(finite) overflow */
1973 case expm1_underflow
:
1974 /* expm1(finite) underflow */
1975 /* Underflow is not documented */
1976 /* special value. */
1981 case expm1f_underflow
:
1982 /* expm1f(finite) underflow */
1987 case scalbl_underflow
:
1988 /* scalbl underflow */
1990 UNDERFLOWL
; NAMEL
= (char *) "scalbl";
1991 if (INPUT_XL
< 0.0L) RETVAL_NEG_ZEROL
;
1993 NOT_MATHERRL
{ERRNO_RANGE
;}
1994 *(long double *)retval
= excf
.retval
;
1997 case scalb_underflow
:
1998 /* scalb underflow */
2000 UNDERFLOWD
; NAMED
= (char *) "scalb";
2001 if (INPUT_XD
< 0.0) RETVAL_NEG_ZEROD
;
2003 NOT_MATHERRD
{ERRNO_RANGE
;}
2004 *(double *)retval
= exc
.retval
;
2007 case scalbf_underflow
:
2008 /* scalbf underflow */
2010 UNDERFLOWF
; NAMEF
= (char *) "scalbf";
2011 if (INPUT_XF
< 0.0) RETVAL_NEG_ZEROF
;
2013 NOT_MATHERRF
{ERRNO_RANGE
;}
2014 *(float *)retval
= excf
.retval
;
2017 case scalbl_overflow
:
2018 /* scalbl overflow */
2020 OVERFLOWL
; NAMEL
= (char *) "scalbl";
2021 if (INPUT_XL
< 0) RETVAL_NEG_HUGE_VALL
;
2022 else RETVAL_HUGE_VALL
;
2023 NOT_MATHERRL
{ERRNO_RANGE
;}
2024 *(long double *)retval
= excl
.retval
;
2027 case scalb_overflow
:
2028 /* scalb overflow */
2030 OVERFLOWD
; NAMED
= (char *) "scalb";
2031 if (INPUT_XD
< 0) RETVAL_NEG_HUGE_VALD
;
2032 else RETVAL_HUGE_VALD
;
2033 NOT_MATHERRD
{ERRNO_RANGE
;}
2034 *(double *)retval
= exc
.retval
;
2037 case scalbf_overflow
:
2038 /* scalbf overflow */
2040 OVERFLOWF
; NAMEF
= (char *) "scalbf";
2041 if (INPUT_XF
< 0) RETVAL_NEG_HUGE_VALF
;
2042 else RETVAL_HUGE_VALF
;
2043 NOT_MATHERRF
{ERRNO_RANGE
;}
2044 *(float *)retval
= excf
.retval
;
2047 case hypotl_overflow
:
2048 /* hypotl overflow */
2050 OVERFLOWL
; NAMEL
= (char *) "hypotl";
2059 NOT_MATHERRL
{ERRNO_RANGE
;}
2060 *(long double *)retval
= excl
.retval
;
2063 case hypot_overflow
:
2064 /* hypot overflow */
2066 OVERFLOWD
; NAMED
= (char *) "hypot";
2075 NOT_MATHERRD
{ERRNO_RANGE
;}
2076 *(double *)retval
= exc
.retval
;
2079 case hypotf_overflow
:
2080 /* hypotf overflow */
2082 OVERFLOWF
; NAMEF
= (char *) "hypotf";
2091 NOT_MATHERRF
{ERRNO_RANGE
;}
2092 *(float *)retval
= excf
.retval
;
2098 DOMAINL
; NAMEL
= (char *) "acosl";
2110 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2112 *(long double *)retval
= excl
.retval
;
2118 DOMAIND
; NAMED
= (char *) "acos";
2130 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2132 *(double *)retval
= exc
.retval
;
2138 DOMAINF
; NAMEF
= (char *) "acosf";
2150 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2152 *(float *)retval
= excf
.retval
;
2158 DOMAINL
; NAMEL
= (char *) "asinl";
2170 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2172 *(long double *)retval
= excl
.retval
;
2178 DOMAIND
; NAMED
= (char *) "asin";
2190 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2192 *(double *)retval
= exc
.retval
;
2198 DOMAINF
; NAMEF
= (char *) "asinf";
2210 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2212 *(float *)retval
= excf
.retval
;
2215 case coshl_overflow
:
2216 /* coshl overflow */
2218 OVERFLOWL
; NAMEL
= (char *) "coshl";
2227 NOT_MATHERRL
{ERRNO_RANGE
;}
2228 *(long double *)retval
= excl
.retval
;
2234 OVERFLOWD
; NAMED
= (char *) "cosh";
2243 NOT_MATHERRD
{ERRNO_RANGE
;}
2244 *(double *)retval
= exc
.retval
;
2247 case coshf_overflow
:
2248 /* coshf overflow */
2250 OVERFLOWF
; NAMEF
= (char *) "coshf";
2259 NOT_MATHERRF
{ERRNO_RANGE
;}
2260 *(float *)retval
= excf
.retval
;
2263 case sinhl_overflow
:
2264 /* sinhl overflow */
2266 OVERFLOWL
; NAMEL
= (char *) "sinhl";
2269 if (INPUT_XL
> 0.0) RETVAL_HUGEL
;
2270 else RETVAL_NEG_HUGEL
;
2274 if (INPUT_XL
> 0.0) RETVAL_HUGE_VALL
;
2275 else RETVAL_NEG_HUGE_VALL
;
2277 NOT_MATHERRL
{ERRNO_RANGE
;}
2278 *(long double *)retval
= excl
.retval
;
2284 OVERFLOWD
; NAMED
= (char *) "sinh";
2287 if (INPUT_XD
> 0.0) RETVAL_HUGED
;
2288 else RETVAL_NEG_HUGED
;
2292 if (INPUT_XD
> 0.0) RETVAL_HUGE_VALD
;
2293 else RETVAL_NEG_HUGE_VALD
;
2295 NOT_MATHERRD
{ERRNO_RANGE
;}
2296 *(double *)retval
= exc
.retval
;
2299 case sinhf_overflow
:
2300 /* sinhf overflow */
2302 OVERFLOWF
; NAMEF
= (char *) "sinhf";
2305 if( INPUT_XF
> 0.0) RETVAL_HUGEF
;
2306 else RETVAL_NEG_HUGEF
;
2310 if (INPUT_XF
> 0.0) RETVAL_HUGE_VALF
;
2311 else RETVAL_NEG_HUGE_VALF
;
2313 NOT_MATHERRF
{ERRNO_RANGE
;}
2314 *(float *)retval
= excf
.retval
;
2320 DOMAINL
; NAMEL
= (char *) "acoshl";
2329 else NOT_MATHERRL
{ERRNO_DOMAIN
;}
2330 *(long double *)retval
= excl
.retval
;
2336 DOMAIND
; NAMED
= (char *) "acosh";
2345 else NOT_MATHERRD
{ERRNO_DOMAIN
;}
2346 *(double *)retval
= exc
.retval
;
2352 DOMAINF
; NAMEF
= (char *) "acoshf";
2363 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2365 *(float *)retval
= excf
.retval
;
2366 ERRNO_DOMAIN
; break;
2369 /* atanhl(|x| > 1) */
2371 DOMAINL
; NAMEL
= (char *) "atanhl";
2376 WRITEL_ATANH_GT_ONE
;
2382 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2387 /* atanh(|x| > 1) */
2389 DOMAIND
; NAMED
= (char *) "atanh";
2394 WRITED_ATANH_GT_ONE
;
2400 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2405 /* atanhf(|x| > 1) */
2407 DOMAINF
; NAMEF
= (char *) "atanhf";
2412 WRITEF_ATANH_GT_ONE
;
2418 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2423 /* atanhl(|x| == 1) */
2425 SINGL
; NAMEL
= (char *)"atanhl";
2430 WRITEL_ATANH_EQ_ONE
;
2436 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2441 /* atanh(|x| == 1) */
2443 SINGD
; NAMED
= (char *) "atanh";
2448 WRITED_ATANH_EQ_ONE
;
2454 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2459 /* atanhf(|x| == 1) */
2461 SINGF
; NAMEF
= (char *) "atanhf";
2466 WRITEF_ATANH_EQ_ONE
;
2472 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2476 case gammal_overflow
:
2477 /* gammal overflow */
2479 OVERFLOWL
; NAMEL
= (char *) "gammal";
2488 NOT_MATHERRL
{ERRNO_RANGE
;}
2489 *(long double *)retval
= excl
.retval
;
2492 case gamma_overflow
:
2493 /* gamma overflow */
2495 OVERFLOWD
; NAMED
= (char *) "gamma";
2504 NOT_MATHERRD
{ERRNO_RANGE
;}
2505 *(double *)retval
= exc
.retval
;
2508 case gammaf_overflow
:
2509 /* gammaf overflow */
2511 OVERFLOWF
; NAMEF
= (char *) "gammaf";
2520 NOT_MATHERRF
{ERRNO_RANGE
;}
2521 *(float *)retval
= excf
.retval
;
2524 case lgammal_overflow
:
2525 /* lgammal overflow */
2527 OVERFLOWL
; NAMEL
= (char *) "lgammal";
2536 NOT_MATHERRL
{ERRNO_RANGE
;}
2537 *(long double *)retval
= excl
.retval
;
2540 case lgamma_overflow
:
2541 /* lgamma overflow */
2543 OVERFLOWD
; NAMED
= (char *) "lgamma";
2552 NOT_MATHERRD
{ERRNO_RANGE
;}
2553 *(double *)retval
= exc
.retval
;
2556 case lgammaf_overflow
:
2557 /* lgammaf overflow */
2559 OVERFLOWF
; NAMEF
= (char *) "lgammaf";
2568 NOT_MATHERRF
{ERRNO_RANGE
;}
2569 *(float *)retval
= excf
.retval
;
2572 case lgammal_negative
:
2573 /* lgammal -int or 0 */
2575 SINGL
; NAMEL
= (char *) "lgammal";
2581 WRITEL_LGAMMA_NEGATIVE
;
2588 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2590 *(long double *)retval
= excl
.retval
;
2593 case lgamma_negative
:
2594 /* lgamma -int or 0 */
2596 SINGD
; NAMED
= (char *) "lgamma";
2602 WRITED_LGAMMA_NEGATIVE
;
2609 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2611 *(double *)retval
= exc
.retval
;
2614 case lgammaf_negative
:
2615 /* lgammaf -int or 0 */
2617 SINGF
; NAMEF
= (char *) "lgammaf";
2623 WRITEF_LGAMMA_NEGATIVE
;
2630 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2632 *(float *)retval
= excf
.retval
;
2635 case gammal_negative
:
2636 /* gammal -int or 0 */
2638 SINGL
; NAMEL
= (char *) "gammal";
2644 WRITEL_GAMMA_NEGATIVE
;
2651 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2653 *(long double *)retval
= excl
.retval
;
2656 case gamma_negative
:
2657 /* gamma -int or 0 */
2659 SINGD
; NAMED
= (char *) "gamma";
2665 WRITED_GAMMA_NEGATIVE
;
2672 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2674 *(double *)retval
= exc
.retval
;
2677 case gammaf_negative
:
2678 /* gammaf -int or 0 */
2680 SINGF
; NAMEF
= (char *) "gammaf";
2686 WRITEF_GAMMA_NEGATIVE
;
2693 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2695 *(float *)retval
= excf
.retval
;
2701 TLOSSL
; NAMEL
= (char *) "j0l";
2713 NOT_MATHERRL
{ERRNO_RANGE
;}
2715 *(long double *)retval
= excl
.retval
;
2721 TLOSSD
; NAMED
= (char *) "j0";
2733 NOT_MATHERRD
{ERRNO_RANGE
;}
2735 *(double*)retval
= exc
.retval
;
2741 TLOSSF
; NAMEF
= (char *) "j0f";
2753 NOT_MATHERRF
{ERRNO_RANGE
;}
2755 *(float*)retval
= excf
.retval
;
2761 TLOSSL
; NAMEL
= (char *) "j1l";
2773 NOT_MATHERRL
{ERRNO_RANGE
;}
2775 *(long double *)retval
= excl
.retval
;
2781 TLOSSD
; NAMED
= (char *) "j1";
2793 NOT_MATHERRD
{ERRNO_RANGE
;}
2795 *(double*)retval
= exc
.retval
;
2801 TLOSSF
; NAMEF
= (char *) "j1f";
2813 NOT_MATHERRF
{ERRNO_RANGE
;}
2815 *(float*)retval
= excf
.retval
;
2821 TLOSSL
; NAMEL
= (char *) "jnl";
2833 NOT_MATHERRL
{ERRNO_RANGE
;}
2835 *(long double *)retval
= excl
.retval
;
2841 TLOSSD
; NAMED
= (char *) "jn";
2853 NOT_MATHERRD
{ERRNO_RANGE
;}
2855 *(double*)retval
= exc
.retval
;
2861 TLOSSF
; NAMEF
= (char *) "jnf";
2873 NOT_MATHERRF
{ERRNO_RANGE
;}
2875 *(float*)retval
= excf
.retval
;
2881 TLOSSL
; NAMEL
= (char *) "y0l";
2893 NOT_MATHERRL
{ERRNO_RANGE
;}
2895 *(long double *)retval
= excl
.retval
;
2901 TLOSSD
; NAMED
= (char *) "y0";
2913 NOT_MATHERRD
{ERRNO_RANGE
;}
2915 *(double*)retval
= exc
.retval
;
2921 TLOSSF
; NAMEF
= (char *) "y0f";
2933 NOT_MATHERRF
{ERRNO_RANGE
;}
2935 *(float*)retval
= excf
.retval
;
2941 DOMAINL
; NAMEL
= (char *) "y0l";
2953 RETVAL_NEG_HUGE_VALL
;
2954 NOT_MATHERRL
{ERRNO_DOMAIN
;}
2956 *(long double *)retval
= excl
.retval
;
2962 DOMAIND
; NAMED
= (char *) "y0";
2974 RETVAL_NEG_HUGE_VALD
;
2975 NOT_MATHERRD
{ERRNO_DOMAIN
;}
2977 *(double *)retval
= exc
.retval
;
2983 DOMAINF
; NAMEF
= (char *) "y0f";
2995 RETVAL_NEG_HUGE_VALF
;
2996 NOT_MATHERRF
{ERRNO_DOMAIN
;}
2998 *(float *)retval
= excf
.retval
;
3004 TLOSSL
; NAMEL
= (char *) "y1l";
3016 NOT_MATHERRL
{ERRNO_RANGE
;}
3018 *(long double *)retval
= excl
.retval
;
3024 TLOSSD
; NAMED
= (char *) "y1";
3036 NOT_MATHERRD
{ERRNO_RANGE
;}
3038 *(double*)retval
= exc
.retval
;
3044 TLOSSF
; NAMEF
= (char *) "y1f";
3056 NOT_MATHERRF
{ERRNO_RANGE
;}
3058 *(float*)retval
= excf
.retval
;
3064 DOMAINL
; NAMEL
= (char *) "y1l";
3076 RETVAL_NEG_HUGE_VALL
;
3077 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3079 *(long double *)retval
= excl
.retval
;
3085 DOMAIND
; NAMED
= (char *) "y1";
3097 RETVAL_NEG_HUGE_VALD
;
3098 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3100 *(double *)retval
= exc
.retval
;
3106 DOMAINF
; NAMEF
= (char *) "y1f";
3117 RETVAL_NEG_HUGE_VALF
;
3118 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3120 *(float *)retval
= excf
.retval
;
3126 TLOSSL
; NAMEL
= (char *) "ynl";
3138 NOT_MATHERRL
{ERRNO_RANGE
;}
3140 *(long double *)retval
= excl
.retval
;
3146 TLOSSD
; NAMED
= (char *) "yn";
3158 NOT_MATHERRD
{ERRNO_RANGE
;}
3160 *(double*)retval
= exc
.retval
;
3166 TLOSSF
; NAMEF
= (char *) "ynf";
3178 NOT_MATHERRF
{ERRNO_RANGE
;}
3180 *(float*)retval
= excf
.retval
;
3186 DOMAINL
; NAMEL
= (char *) "ynl";
3198 RETVAL_NEG_HUGE_VALL
;
3199 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3201 *(long double *)retval
= excl
.retval
;
3207 DOMAIND
; NAMED
= (char *) "yn";
3219 RETVAL_NEG_HUGE_VALD
;
3220 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3222 *(double *)retval
= exc
.retval
;
3228 DOMAINF
; NAMEF
= (char *) "ynf";
3240 RETVAL_NEG_HUGE_VALF
;
3241 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3243 *(float *)retval
= excf
.retval
;
3249 DOMAINL
; NAMEL
= (char *) "y0l";
3261 RETVAL_NEG_HUGE_VALL
;
3262 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3264 *(long double *)retval
= excl
.retval
;
3270 DOMAIND
; NAMED
= (char *) "y0";
3282 RETVAL_NEG_HUGE_VALD
;
3283 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3285 *(double *)retval
= exc
.retval
;
3291 DOMAINF
; NAMEF
= (char *) "y0f";
3303 RETVAL_NEG_HUGE_VALF
;
3304 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3306 *(float *)retval
= excf
.retval
;
3312 DOMAINL
; NAMEL
= (char *) "y1l";
3324 RETVAL_NEG_HUGE_VALL
;
3325 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3327 *(long double *)retval
= excl
.retval
;
3333 DOMAIND
; NAMED
= (char *) "y1";
3345 RETVAL_NEG_HUGE_VALD
;
3346 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3348 *(double *)retval
= exc
.retval
;
3354 DOMAINF
; NAMEF
= (char *) "y1f";
3366 RETVAL_NEG_HUGE_VALF
;
3367 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3369 *(float *)retval
= excf
.retval
;
3375 DOMAINL
; NAMEL
= (char *) "ynl";
3387 RETVAL_NEG_HUGE_VALL
;
3388 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3390 *(long double *)retval
= excl
.retval
;
3396 DOMAIND
; NAMED
= (char *) "yn";
3408 RETVAL_NEG_HUGE_VALD
;
3409 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3411 *(double *)retval
= exc
.retval
;
3417 DOMAINF
; NAMEF
= (char *) "ynf";
3429 RETVAL_NEG_HUGE_VALF
;
3430 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3432 *(float *)retval
= excf
.retval
;
3438 DOMAINL
; NAMEL
= (char *) "fmodl";
3441 *(long double *)retval
= *(long double *)arg1
;
3449 { /* NaN already computed */
3450 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3452 *(long double *)retval
= excl
.retval
;
3458 DOMAIND
; NAMED
= (char *) "fmod";
3461 *(double *)retval
= *(double *)arg1
;
3469 { /* NaN already computed */
3470 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3472 *(double *)retval
= exc
.retval
;
3478 DOMAINF
; NAMEF
= (char *) "fmodf";
3481 *(float *)retval
= *(float *)arg1
;
3490 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3492 *(float *)retval
= excf
.retval
;
3495 case remainderl_by_zero
:
3496 /* remainderl(x,0) */
3498 DOMAINL
; NAMEL
= (char *) "remainderl";
3508 { /* NaN already computed */
3509 NOT_MATHERRL
{ERRNO_DOMAIN
;}
3511 *(long double *)retval
= excl
.retval
;
3514 case remainder_by_zero
:
3515 /* remainder(x,0) */
3517 DOMAIND
; NAMED
= (char *) "remainder";
3527 { /* NaN already computed */
3528 NOT_MATHERRD
{ERRNO_DOMAIN
;}
3530 *(double *)retval
= exc
.retval
;
3533 case remainderf_by_zero
:
3534 /* remainderf(x,0) */
3536 DOMAINF
; NAMEF
= (char *) "remainderf";
3547 NOT_MATHERRF
{ERRNO_DOMAIN
;}
3549 *(float *)retval
= excf
.retval
;