PowerPC: fix hypot/hypof FP exceptions
[glibc.git] / math / libm-test.inc
blob7afa46dba828b79db39b29db9c24c25eca207598
1 /* Copyright (C) 1997-2013 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Andreas Jaeger <aj@suse.de>, 1997.
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
10    The GNU C Library 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 GNU
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
19 /* Part of testsuite for libm.
21    This file is processed by a perl script.  The resulting file has to
22    be included by a master file that defines:
24    Macros:
25    FUNC(function): converts general function name (like cos) to
26    name with correct suffix (e.g. cosl or cosf)
27    MATHCONST(x):   like FUNC but for constants (e.g convert 0.0 to 0.0L)
28    FLOAT:          floating point type to test
29    - TEST_MSG:     informal message to be displayed
30    CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
31    chooses one of the parameters as delta for testing
32    equality
33    PRINTF_EXPR     Floating point conversion specification to print a variable
34    of type FLOAT with printf.  PRINTF_EXPR just contains
35    the specifier, not the percent and width arguments,
36    e.g. "f".
37    PRINTF_XEXPR    Like PRINTF_EXPR, but print in hexadecimal format.
38    PRINTF_NEXPR Like PRINTF_EXPR, but print nice.  */
40 /* This testsuite has currently tests for:
41    acos, acosh, asin, asinh, atan, atan2, atanh,
42    cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
43    fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify,
44    frexp, gamma, hypot,
45    ilogb, isfinite, isinf, isnan, isnormal, issignaling,
46    isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
47    j0, j1, jn,
48    ldexp, lgamma, log, log10, log1p, log2, logb,
49    modf, nearbyint, nextafter, nexttoward,
50    pow, remainder, remquo, rint, lrint, llrint,
51    round, lround, llround,
52    scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
53    y0, y1, yn, significand
55    and for the following complex math functions:
56    cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
57    ccos, ccosh, cexp, cimag, clog, clog10, conj, cpow, cproj, creal,
58    csin, csinh, csqrt, ctan, ctanh.
60    At the moment the following functions and macros aren't tested:
61    drem (alias for remainder),
62    lgamma_r,
63    nan,
64    pow10 (alias for exp10).
66    Parameter handling is primitive in the moment:
67    --verbose=[0..3] for different levels of output:
68    0: only error count
69    1: basic report on failed tests (default)
70    2: full report on all tests
71    -v for full output (equals --verbose=3)
72    -u for generation of an ULPs file
73  */
75 /* "Philosophy":
77    This suite tests some aspects of the correct implementation of
78    mathematical functions in libm.  Some simple, specific parameters
79    are tested for correctness but there's no exhaustive
80    testing.  Handling of specific inputs (e.g. infinity, not-a-number)
81    is also tested.  Correct handling of exceptions is checked
82    against.  These implemented tests should check all cases that are
83    specified in ISO C99.
85    Exception testing: At the moment only divide-by-zero, invalid,
86    overflow and underflow exceptions are tested.  Inexact exceptions
87    aren't checked at the moment.
89    NaN values: There exist signalling and quiet NaNs.  This implementation
90    only uses quiet NaN as parameter.  Where the sign of a NaN is
91    significant, this is not tested.  The payload of NaNs is not examined.
93    Inline functions: Inlining functions should give an improvement in
94    speed - but not in precission.  The inlined functions return
95    reasonable values for a reasonable range of input values.  The
96    result is not necessarily correct for all values and exceptions are
97    not correctly raised in all cases.  Problematic input and return
98    values are infinity, not-a-number and minus zero.  This suite
99    therefore does not check these specific inputs and the exception
100    handling for inlined mathematical functions - just the "reasonable"
101    values are checked.
103    Beware: The tests might fail for any of the following reasons:
104    - Tests are wrong
105    - Functions are wrong
106    - Floating Point Unit not working properly
107    - Compiler has errors
109    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
112    To Do: All parameter should be numbers that can be represented as
113    exact floating point values.  Currently some values cannot be
114    represented exactly and therefore the result is not the expected
115    result.  For this we will use 36 digits so that numbers can be
116    represented exactly.  */
118 #ifndef _GNU_SOURCE
119 # define _GNU_SOURCE
120 #endif
122 #include "libm-test-ulps.h"
123 #include <complex.h>
124 #include <math.h>
125 #include <float.h>
126 #include <fenv.h>
127 #include <limits.h>
129 #include <errno.h>
130 #include <stdlib.h>
131 #include <stdio.h>
132 #include <string.h>
133 #include <argp.h>
134 #include <tininess.h>
136 /* Allow platforms without all rounding modes to test properly,
137    assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which
138    causes fesetround() to return failure.  */
139 #ifndef FE_TONEAREST
140 # define FE_TONEAREST   __FE_UNDEFINED
141 #endif
142 #ifndef FE_TOWARDZERO
143 # define FE_TOWARDZERO  __FE_UNDEFINED
144 #endif
145 #ifndef FE_UPWARD
146 # define FE_UPWARD      __FE_UNDEFINED
147 #endif
148 #ifndef FE_DOWNWARD
149 # define FE_DOWNWARD    __FE_UNDEFINED
150 #endif
152 /* Possible exceptions */
153 #define NO_EXCEPTION                    0x0
154 #define INVALID_EXCEPTION               0x1
155 #define DIVIDE_BY_ZERO_EXCEPTION        0x2
156 #define OVERFLOW_EXCEPTION              0x4
157 #define UNDERFLOW_EXCEPTION             0x8
158 /* The next flags signals that those exceptions are allowed but not required.   */
159 #define INVALID_EXCEPTION_OK            0x10
160 #define DIVIDE_BY_ZERO_EXCEPTION_OK     0x20
161 #define OVERFLOW_EXCEPTION_OK           0x40
162 #define UNDERFLOW_EXCEPTION_OK          0x80
163 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
164 /* Some special test flags, passed together with exceptions.  */
165 #define IGNORE_ZERO_INF_SIGN            0x100
166 /* Indicate errno settings required or disallowed.  */
167 #define ERRNO_UNCHANGED                 0x200
168 #define ERRNO_EDOM                      0x400
169 #define ERRNO_ERANGE                    0x800
171 /* Values underflowing only for float.  */
172 #ifdef TEST_FLOAT
173 # define UNDERFLOW_EXCEPTION_FLOAT      UNDERFLOW_EXCEPTION
174 # define UNDERFLOW_EXCEPTION_OK_FLOAT   UNDERFLOW_EXCEPTION_OK
175 #else
176 # define UNDERFLOW_EXCEPTION_FLOAT      0
177 # define UNDERFLOW_EXCEPTION_OK_FLOAT   0
178 #endif
179 /* Values underflowing only for double or types with a larger least
180    positive normal value.  */
181 #if defined TEST_FLOAT || defined TEST_DOUBLE \
182   || (defined TEST_LDOUBLE && LDBL_MIN_EXP >= DBL_MIN_EXP)
183 # define UNDERFLOW_EXCEPTION_DOUBLE     UNDERFLOW_EXCEPTION
184 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  UNDERFLOW_EXCEPTION_OK
185 #else
186 # define UNDERFLOW_EXCEPTION_DOUBLE     0
187 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  0
188 #endif
189 /* Values underflowing only for IBM long double or types with a larger least
190    positive normal value.  */
191 #if defined TEST_FLOAT || (defined TEST_LDOUBLE && LDBL_MIN_EXP > DBL_MIN_EXP)
192 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        UNDERFLOW_EXCEPTION
193 #else
194 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        0
195 #endif
196 /* Values underflowing on architectures detecting tininess before
197    rounding, but not on those detecting tininess after rounding.  */
198 #define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING     (TININESS_AFTER_ROUNDING \
199                                                  ? 0                    \
200                                                  : UNDERFLOW_EXCEPTION)
202 /* Various constants (we must supply them precalculated for accuracy).  */
203 #define M_PI_6l                 .52359877559829887307710723054658383L
204 #define M_E2l                   7.389056098930650227230427460575008L
205 #define M_E3l                   20.085536923187667740928529654581719L
206 #define M_2_SQRT_PIl            3.5449077018110320545963349666822903L   /* 2 sqrt (M_PIl)  */
207 #define M_SQRT_PIl              1.7724538509055160272981674833411451L   /* sqrt (M_PIl)  */
208 #define M_LOG_SQRT_PIl          0.57236494292470008707171367567652933L  /* log(sqrt(M_PIl))  */
209 #define M_LOG_2_SQRT_PIl        1.265512123484645396488945797134706L    /* log(2*sqrt(M_PIl))  */
210 #define M_PI_34l                (M_PIl - M_PI_4l)               /* 3*pi/4 */
211 #define M_PI_34_LOG10El         (M_PIl - M_PI_4l) * M_LOG10El
212 #define M_PI2_LOG10El           M_PI_2l * M_LOG10El
213 #define M_PI4_LOG10El           M_PI_4l * M_LOG10El
214 #define M_PI_LOG10El            M_PIl * M_LOG10El
215 #define M_SQRT_2_2              0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
217 #define ulps_file_name "ULPs"   /* Name of the ULPs file.  */
218 static FILE *ulps_file;         /* File to document difference.  */
219 static int output_ulps;         /* Should ulps printed?  */
220 static char *output_dir;        /* Directory where generated files will be written.  */
222 static int noErrors;    /* number of errors */
223 static int noTests;     /* number of tests (without testing exceptions) */
224 static int noExcTests;  /* number of tests for exception flags */
225 static int noErrnoTests;/* number of tests for errno values */
227 static int verbose;
228 static int output_max_error;    /* Should the maximal errors printed?  */
229 static int output_points;       /* Should the single function results printed?  */
230 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
232 static const FLOAT plus_zero = CHOOSE (0.0L, 0.0, 0.0f,
233                                        0.0L, 0.0, 0.0f);
234 static const FLOAT minus_zero = CHOOSE (-0.0L, -0.0, -0.0f,
235                                         -0.0L, -0.0, -0.0f);
236 static const FLOAT plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
237                                         HUGE_VALL, HUGE_VAL, HUGE_VALF);
238 static const FLOAT minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
239                                          -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
240 static const FLOAT qnan_value = FUNC (__builtin_nan) ("");
241 static const FLOAT max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
242                                        LDBL_MAX, DBL_MAX, FLT_MAX);
243 static const FLOAT min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
244                                        LDBL_MIN, DBL_MIN, FLT_MIN);
245 static const FLOAT min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
246                                                __DBL_DENORM_MIN__,
247                                                __FLT_DENORM_MIN__,
248                                                __LDBL_DENORM_MIN__,
249                                                __DBL_DENORM_MIN__,
250                                                __FLT_DENORM_MIN__);
252 static FLOAT max_error, real_max_error, imag_max_error;
255 #define BUILD_COMPLEX(real, imag) \
256   ({ __complex__ FLOAT __retval;                                              \
257      __real__ __retval = (real);                                              \
258      __imag__ __retval = (imag);                                              \
259      __retval; })
262 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
263                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
265 static void
266 init_max_error (void)
268   max_error = 0;
269   real_max_error = 0;
270   imag_max_error = 0;
271   feclearexcept (FE_ALL_EXCEPT);
272   errno = 0;
275 static void
276 set_max_error (FLOAT current, FLOAT *curr_max_error)
278   if (current > *curr_max_error)
279     *curr_max_error = current;
283 /* Print a FLOAT.  */
284 static void
285 print_float (FLOAT f)
287   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
288   if (issignaling (f))
289     printf ("sNaN\n");
290   else if (isnan (f))
291     printf ("qNaN\n");
292   else
293     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
296 /* Should the message print to screen?  This depends on the verbose flag,
297    and the test status.  */
298 static int
299 print_screen (int ok)
301   if (output_points
302       && (verbose > 1
303           || (verbose == 1 && ok == 0)))
304     return 1;
305   return 0;
309 /* Should the message print to screen?  This depends on the verbose flag,
310    and the test status.  */
311 static int
312 print_screen_max_error (int ok)
314   if (output_max_error
315       && (verbose > 1
316           || ((verbose == 1) && (ok == 0))))
317     return 1;
318   return 0;
321 /* Update statistic counters.  */
322 static void
323 update_stats (int ok)
325   ++noTests;
326   if (!ok)
327     ++noErrors;
330 static void
331 print_ulps (const char *test_name, FLOAT ulp)
333   if (output_ulps)
334     {
335       fprintf (ulps_file, "Test \"%s\":\n", test_name);
336       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
337                CHOOSE("ldouble", "double", "float",
338                       "ildouble", "idouble", "ifloat"),
339                FUNC(ceil) (ulp));
340     }
343 static void
344 print_function_ulps (const char *function_name, FLOAT ulp)
346   if (output_ulps)
347     {
348       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
349       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
350                CHOOSE("ldouble", "double", "float",
351                       "ildouble", "idouble", "ifloat"),
352                FUNC(ceil) (ulp));
353     }
357 static void
358 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
359                              FLOAT imag_ulp)
361   if (output_ulps)
362     {
363       if (real_ulp != 0.0)
364         {
365           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
366           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
367                    CHOOSE("ldouble", "double", "float",
368                           "ildouble", "idouble", "ifloat"),
369                    FUNC(ceil) (real_ulp));
370         }
371       if (imag_ulp != 0.0)
372         {
373           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
374           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
375                    CHOOSE("ldouble", "double", "float",
376                           "ildouble", "idouble", "ifloat"),
377                    FUNC(ceil) (imag_ulp));
378         }
381     }
386 /* Test if Floating-Point stack hasn't changed */
387 static void
388 fpstack_test (const char *test_name)
390 #if defined (__i386__) || defined (__x86_64__)
391   static int old_stack;
392   int sw;
394   asm ("fnstsw" : "=a" (sw));
395   sw >>= 11;
396   sw &= 7;
398   if (sw != old_stack)
399     {
400       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
401               test_name, sw, old_stack);
402       ++noErrors;
403       old_stack = sw;
404     }
405 #endif
409 static void
410 print_max_error (const char *func_name, FLOAT allowed)
412   int ok = 0;
414   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
415     {
416       ok = 1;
417     }
419   if (!ok)
420     print_function_ulps (func_name, max_error);
423   if (print_screen_max_error (ok))
424     {
425       printf ("Maximal error of `%s'\n", func_name);
426       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
427       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
428     }
430   update_stats (ok);
434 static void
435 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed)
437   int ok = 0;
439   if ((real_max_error == 0 && imag_max_error == 0)
440       || (real_max_error <= __real__ allowed
441           && imag_max_error <= __imag__ allowed
442           && !ignore_max_ulp))
443     {
444       ok = 1;
445     }
447   if (!ok)
448     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
451   if (print_screen_max_error (ok))
452     {
453       printf ("Maximal error of real part of: %s\n", func_name);
454       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
455               FUNC(ceil) (real_max_error));
456       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
457               FUNC(ceil) (__real__ allowed));
458       printf ("Maximal error of imaginary part of: %s\n", func_name);
459       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
460               FUNC(ceil) (imag_max_error));
461       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
462               FUNC(ceil) (__imag__ allowed));
463     }
465   update_stats (ok);
469 /* Test whether a given exception was raised.  */
470 static void
471 test_single_exception (const char *test_name,
472                        int exception,
473                        int exc_flag,
474                        int fe_flag,
475                        const char *flag_name)
477 #ifndef TEST_INLINE
478   int ok = 1;
479   if (exception & exc_flag)
480     {
481       if (fetestexcept (fe_flag))
482         {
483           if (print_screen (1))
484             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
485         }
486       else
487         {
488           ok = 0;
489           if (print_screen (0))
490             printf ("Failure: %s: Exception \"%s\" not set\n",
491                     test_name, flag_name);
492         }
493     }
494   else
495     {
496       if (fetestexcept (fe_flag))
497         {
498           ok = 0;
499           if (print_screen (0))
500             printf ("Failure: %s: Exception \"%s\" set\n",
501                     test_name, flag_name);
502         }
503       else
504         {
505           if (print_screen (1))
506             printf ("%s: Exception \"%s\" not set\n", test_name,
507                     flag_name);
508         }
509     }
510   if (!ok)
511     ++noErrors;
513 #endif
517 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
518    allowed but not required exceptions.
520 static void
521 test_exceptions (const char *test_name, int exception)
523   ++noExcTests;
524 #ifdef FE_DIVBYZERO
525   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
526     test_single_exception (test_name, exception,
527                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
528                            "Divide by zero");
529 #endif
530 #ifdef FE_INVALID
531   if ((exception & INVALID_EXCEPTION_OK) == 0)
532     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
533                          "Invalid operation");
534 #endif
535 #ifdef FE_OVERFLOW
536   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
537     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
538                            FE_OVERFLOW, "Overflow");
539 #endif
540 #ifdef FE_UNDERFLOW
541   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
542     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
543                            FE_UNDERFLOW, "Underflow");
544 #endif
545   feclearexcept (FE_ALL_EXCEPT);
548 /* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value
549    EXPECTED_VALUE (description EXPECTED_NAME).  */
550 static void
551 test_single_errno (const char *test_name, int errno_value,
552                    int expected_value, const char *expected_name)
554   if (errno_value == expected_value)
555     {
556       if (print_screen (1))
557         printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value,
558                 expected_name);
559     }
560   else
561     {
562       ++noErrors;
563       if (print_screen (0))
564         printf ("Failure: %s: errno set to %d, expected %d (%s)\n",
565                 test_name, errno_value, expected_value, expected_name);
566     }
569 /* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set
570    as required by EXCEPTIONS.  */
571 static void
572 test_errno (const char *test_name, int errno_value, int exceptions)
574   ++noErrnoTests;
575   if (exceptions & ERRNO_UNCHANGED)
576     test_single_errno (test_name, errno_value, 0, "unchanged");
577   if (exceptions & ERRNO_EDOM)
578     test_single_errno (test_name, errno_value, EDOM, "EDOM");
579   if (exceptions & ERRNO_ERANGE)
580     test_single_errno (test_name, errno_value, ERANGE, "ERANGE");
583 static void
584 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
585                       FLOAT max_ulp, int exceptions,
586                       FLOAT *curr_max_error)
588   int ok = 0;
589   int print_diff = 0;
590   FLOAT diff = 0;
591   FLOAT ulp = 0;
592   int errno_value = errno;
594   test_exceptions (test_name, exceptions);
595   test_errno (test_name, errno_value, exceptions);
596   if (issignaling (computed) && issignaling (expected))
597     ok = 1;
598   else if (issignaling (computed) || issignaling (expected))
599     ok = 0;
600   else if (isnan (computed) && isnan (expected))
601     ok = 1;
602   else if (isinf (computed) && isinf (expected))
603     {
604       /* Test for sign of infinities.  */
605       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
606           && signbit (computed) != signbit (expected))
607         {
608           ok = 0;
609           printf ("infinity has wrong sign.\n");
610         }
611       else
612         ok = 1;
613     }
614   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
615   else if (isinf (computed) || isnan (computed)
616            || isinf (expected) || isnan (expected))
617     ok = 0;
618   else
619     {
620       diff = FUNC(fabs) (computed - expected);
621       switch (fpclassify (expected))
622         {
623         case FP_ZERO:
624           /* ilogb (0) isn't allowed. */
625           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
626           break;
627         case FP_NORMAL:
628           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
629           break;
630         case FP_SUBNORMAL:
631           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
632              least normal value.  */
633           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
634           break;
635         default:
636           /* It should never happen. */
637           abort ();
638           break;
639         }
640       set_max_error (ulp, curr_max_error);
641       print_diff = 1;
642       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
643           && computed == 0.0 && expected == 0.0
644           && signbit(computed) != signbit (expected))
645         ok = 0;
646       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
647         ok = 1;
648       else
649         {
650           ok = 0;
651           print_ulps (test_name, ulp);
652         }
654     }
655   if (print_screen (ok))
656     {
657       if (!ok)
658         printf ("Failure: ");
659       printf ("Test: %s\n", test_name);
660       printf ("Result:\n");
661       printf (" is:         ");
662       print_float (computed);
663       printf (" should be:  ");
664       print_float (expected);
665       if (print_diff)
666         {
667           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
668                   "\n", diff, diff);
669           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
670           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
671         }
672     }
673   update_stats (ok);
675   fpstack_test (test_name);
676   errno = 0;
680 static void
681 check_float (const char *test_name, FLOAT computed, FLOAT expected,
682              FLOAT max_ulp, int exceptions)
684   check_float_internal (test_name, computed, expected, max_ulp,
685                         exceptions, &max_error);
689 static void
690 check_complex (const char *test_name, __complex__ FLOAT computed,
691                __complex__ FLOAT expected,
692                __complex__ FLOAT max_ulp,
693                int exception)
695   FLOAT part_comp, part_exp, part_max_ulp;
696   char *str;
698   if (asprintf (&str, "Real part of: %s", test_name) == -1)
699     abort ();
701   part_comp = __real__ computed;
702   part_exp = __real__ expected;
703   part_max_ulp = __real__ max_ulp;
705   check_float_internal (str, part_comp, part_exp, part_max_ulp,
706                         exception, &real_max_error);
707   free (str);
709   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
710     abort ();
712   part_comp = __imag__ computed;
713   part_exp = __imag__ expected;
714   part_max_ulp = __imag__ max_ulp;
716   /* Don't check again for exceptions or errno, just pass through the
717      zero/inf sign test.  */
718   check_float_internal (str, part_comp, part_exp, part_max_ulp,
719                         exception & IGNORE_ZERO_INF_SIGN,
720                         &imag_max_error);
721   free (str);
725 /* Check that computed and expected values are equal (int values).  */
726 static void
727 check_int (const char *test_name, int computed, int expected, int max_ulp,
728            int exceptions)
730   int diff = computed - expected;
731   int ok = 0;
732   int errno_value = errno;
734   test_exceptions (test_name, exceptions);
735   test_errno (test_name, errno_value, exceptions);
736   noTests++;
737   if (abs (diff) <= max_ulp)
738     ok = 1;
740   if (!ok)
741     print_ulps (test_name, diff);
743   if (print_screen (ok))
744     {
745       if (!ok)
746         printf ("Failure: ");
747       printf ("Test: %s\n", test_name);
748       printf ("Result:\n");
749       printf (" is:         %d\n", computed);
750       printf (" should be:  %d\n", expected);
751     }
753   update_stats (ok);
754   fpstack_test (test_name);
755   errno = 0;
759 /* Check that computed and expected values are equal (long int values).  */
760 static void
761 check_long (const char *test_name, long int computed, long int expected,
762             long int max_ulp, int exceptions)
764   long int diff = computed - expected;
765   int ok = 0;
766   int errno_value = errno;
768   test_exceptions (test_name, exceptions);
769   test_errno (test_name, errno_value, exceptions);
770   noTests++;
771   if (labs (diff) <= max_ulp)
772     ok = 1;
774   if (!ok)
775     print_ulps (test_name, diff);
777   if (print_screen (ok))
778     {
779       if (!ok)
780         printf ("Failure: ");
781       printf ("Test: %s\n", test_name);
782       printf ("Result:\n");
783       printf (" is:         %ld\n", computed);
784       printf (" should be:  %ld\n", expected);
785     }
787   update_stats (ok);
788   fpstack_test (test_name);
789   errno = 0;
793 /* Check that computed value is true/false.  */
794 static void
795 check_bool (const char *test_name, int computed, int expected,
796             long int max_ulp, int exceptions)
798   int ok = 0;
799   int errno_value = errno;
801   test_exceptions (test_name, exceptions);
802   test_errno (test_name, errno_value, exceptions);
803   noTests++;
804   if ((computed == 0) == (expected == 0))
805     ok = 1;
807   if (print_screen (ok))
808     {
809       if (!ok)
810         printf ("Failure: ");
811       printf ("Test: %s\n", test_name);
812       printf ("Result:\n");
813       printf (" is:         %d\n", computed);
814       printf (" should be:  %d\n", expected);
815     }
817   update_stats (ok);
818   fpstack_test (test_name);
819   errno = 0;
823 /* check that computed and expected values are equal (long int values) */
824 static void
825 check_longlong (const char *test_name, long long int computed,
826                 long long int expected,
827                 long long int max_ulp,
828                 int exceptions)
830   long long int diff = computed - expected;
831   int ok = 0;
832   int errno_value = errno;
834   test_exceptions (test_name, exceptions);
835   test_errno (test_name, errno_value, exceptions);
836   noTests++;
837   if (llabs (diff) <= max_ulp)
838     ok = 1;
840   if (!ok)
841     print_ulps (test_name, diff);
843   if (print_screen (ok))
844     {
845       if (!ok)
846         printf ("Failure:");
847       printf ("Test: %s\n", test_name);
848       printf ("Result:\n");
849       printf (" is:         %lld\n", computed);
850       printf (" should be:  %lld\n", expected);
851     }
853   update_stats (ok);
854   fpstack_test (test_name);
855   errno = 0;
860 /* This is to prevent messages from the SVID libm emulation.  */
862 matherr (struct exception *x __attribute__ ((unused)))
864   return 1;
868 /****************************************************************************
869   Tests for single functions of libm.
870   Please keep them alphabetically sorted!
871 ****************************************************************************/
873 static void
874 acos_test (void)
876   errno = 0;
877   FUNC(acos) (0);
878   if (errno == ENOSYS)
879     /* Function not implemented.  */
880     return;
882   START (acos);
884   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
885   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
886   TEST_f_f (acos, qnan_value, qnan_value);
888   /* |x| > 1: */
889   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
890   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
891   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
892   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
894   TEST_f_f (acos, 0, M_PI_2l);
895   TEST_f_f (acos, minus_zero, M_PI_2l);
896   TEST_f_f (acos, 1, 0);
897   TEST_f_f (acos, -1, M_PIl);
898   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
899   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
900   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
901   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
902   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
903   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
904   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
905 #ifndef TEST_FLOAT
906   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
907   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
908   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
909   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
910 #endif
911 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
912   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
913   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
914 #endif
915   END (acos);
919 static void
920 acos_test_tonearest (void)
922   int save_round_mode;
923   errno = 0;
924   FUNC(acos) (0);
925   if (errno == ENOSYS)
926     /* Function not implemented.  */
927     return;
929   START (acos_tonearest);
931   save_round_mode = fegetround ();
933   if (!fesetround (FE_TONEAREST))
934     {
935       TEST_f_f (acos, 0, M_PI_2l);
936       TEST_f_f (acos, minus_zero, M_PI_2l);
937       TEST_f_f (acos, 1, 0);
938       TEST_f_f (acos, -1, M_PIl);
939       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
940       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
941     }
943   fesetround (save_round_mode);
945   END (acos_tonearest);
949 static void
950 acos_test_towardzero (void)
952   int save_round_mode;
953   errno = 0;
954   FUNC(acos) (0);
955   if (errno == ENOSYS)
956     /* Function not implemented.  */
957     return;
959   START (acos_towardzero);
961   save_round_mode = fegetround ();
963   if (!fesetround (FE_TOWARDZERO))
964     {
965       TEST_f_f (acos, 0, M_PI_2l);
966       TEST_f_f (acos, minus_zero, M_PI_2l);
967       TEST_f_f (acos, 1, 0);
968       TEST_f_f (acos, -1, M_PIl);
969       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
970       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
971     }
973   fesetround (save_round_mode);
975   END (acos_towardzero);
979 static void
980 acos_test_downward (void)
982   int save_round_mode;
983   errno = 0;
984   FUNC(acos) (0);
985   if (errno == ENOSYS)
986     /* Function not implemented.  */
987     return;
989   START (acos_downward);
991   save_round_mode = fegetround ();
993   if (!fesetround (FE_DOWNWARD))
994     {
995       TEST_f_f (acos, 0, M_PI_2l);
996       TEST_f_f (acos, minus_zero, M_PI_2l);
997       TEST_f_f (acos, 1, 0);
998       TEST_f_f (acos, -1, M_PIl);
999       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1000       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1001     }
1003   fesetround (save_round_mode);
1005   END (acos_downward);
1009 static void
1010 acos_test_upward (void)
1012   int save_round_mode;
1013   errno = 0;
1014   FUNC(acos) (0);
1015   if (errno == ENOSYS)
1016     /* Function not implemented.  */
1017     return;
1019   START (acos_upward);
1021   save_round_mode = fegetround ();
1023   if (!fesetround (FE_UPWARD))
1024     {
1025       TEST_f_f (acos, 0, M_PI_2l);
1026       TEST_f_f (acos, minus_zero, M_PI_2l);
1027       TEST_f_f (acos, 1, 0);
1028       TEST_f_f (acos, -1, M_PIl);
1029       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1030       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1031     }
1033   fesetround (save_round_mode);
1035   END (acos_upward);
1038 static void
1039 acosh_test (void)
1041   errno = 0;
1042   FUNC(acosh) (7);
1043   if (errno == ENOSYS)
1044     /* Function not implemented.  */
1045     return;
1047   START (acosh);
1049   TEST_f_f (acosh, plus_infty, plus_infty);
1050   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
1051   TEST_f_f (acosh, qnan_value, qnan_value);
1053   /* x < 1:  */
1054   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1055   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1057   TEST_f_f (acosh, 1, 0);
1058   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1060   END (acosh);
1063 static void
1064 asin_test (void)
1066   errno = 0;
1067   FUNC(asin) (0);
1068   if (errno == ENOSYS)
1069     /* Function not implemented.  */
1070     return;
1072   START (asin);
1074   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1075   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1076   TEST_f_f (asin, qnan_value, qnan_value);
1078   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1079   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1080   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1081   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1082   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1084   TEST_f_f (asin, 0, 0);
1085   TEST_f_f (asin, minus_zero, minus_zero);
1086   TEST_f_f (asin, 0.5, M_PI_6l);
1087   TEST_f_f (asin, -0.5, -M_PI_6l);
1088   TEST_f_f (asin, 1.0, M_PI_2l);
1089   TEST_f_f (asin, -1.0, -M_PI_2l);
1090   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1091   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1092   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1093 #ifndef TEST_FLOAT
1094   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1095   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1096   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1097   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1098 #endif
1099 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1100   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1101   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1102 #endif
1104   END (asin);
1108 static void
1109 asin_test_tonearest (void)
1111   int save_round_mode;
1112   errno = 0;
1113   FUNC(asin) (0);
1114   if (errno == ENOSYS)
1115     /* Function not implemented.  */
1116     return;
1118   START (asin_tonearest);
1120   save_round_mode = fegetround ();
1122   if (!fesetround (FE_TONEAREST))
1123     {
1124       TEST_f_f (asin, 0, 0);
1125       TEST_f_f (asin, minus_zero, minus_zero);
1126       TEST_f_f (asin, 0.5, M_PI_6l);
1127       TEST_f_f (asin, -0.5, -M_PI_6l);
1128       TEST_f_f (asin, 1.0, M_PI_2l);
1129       TEST_f_f (asin, -1.0, -M_PI_2l);
1130     }
1132   fesetround (save_round_mode);
1134   END (asin_tonearest);
1138 static void
1139 asin_test_towardzero (void)
1141   int save_round_mode;
1142   errno = 0;
1143   FUNC(asin) (0);
1144   if (errno == ENOSYS)
1145     /* Function not implemented.  */
1146     return;
1148   START (asin_towardzero);
1150   save_round_mode = fegetround ();
1152   if (!fesetround (FE_TOWARDZERO))
1153     {
1154       TEST_f_f (asin, 0, 0);
1155       TEST_f_f (asin, minus_zero, minus_zero);
1156       TEST_f_f (asin, 0.5, M_PI_6l);
1157       TEST_f_f (asin, -0.5, -M_PI_6l);
1158       TEST_f_f (asin, 1.0, M_PI_2l);
1159       TEST_f_f (asin, -1.0, -M_PI_2l);
1160     }
1162   fesetround (save_round_mode);
1164   END (asin_towardzero);
1168 static void
1169 asin_test_downward (void)
1171   int save_round_mode;
1172   errno = 0;
1173   FUNC(asin) (0);
1174   if (errno == ENOSYS)
1175     /* Function not implemented.  */
1176     return;
1178   START (asin_downward);
1180   save_round_mode = fegetround ();
1182   if (!fesetround (FE_DOWNWARD))
1183     {
1184       TEST_f_f (asin, 0, 0);
1185       TEST_f_f (asin, minus_zero, minus_zero);
1186       TEST_f_f (asin, 0.5, M_PI_6l);
1187       TEST_f_f (asin, -0.5, -M_PI_6l);
1188       TEST_f_f (asin, 1.0, M_PI_2l);
1189       TEST_f_f (asin, -1.0, -M_PI_2l);
1190     }
1192   fesetround (save_round_mode);
1194   END (asin_downward);
1198 static void
1199 asin_test_upward (void)
1201   int save_round_mode;
1202   errno = 0;
1203   FUNC(asin) (0);
1204   if (errno == ENOSYS)
1205     /* Function not implemented.  */
1206     return;
1208   START (asin_upward);
1210   save_round_mode = fegetround ();
1212   if (!fesetround (FE_UPWARD))
1213     {
1214       TEST_f_f (asin, 0, 0);
1215       TEST_f_f (asin, minus_zero, minus_zero);
1216       TEST_f_f (asin, 0.5, M_PI_6l);
1217       TEST_f_f (asin, -0.5, -M_PI_6l);
1218       TEST_f_f (asin, 1.0, M_PI_2l);
1219       TEST_f_f (asin, -1.0, -M_PI_2l);
1220     }
1222   fesetround (save_round_mode);
1224   END (asin_upward);
1227 static void
1228 asinh_test (void)
1230   errno = 0;
1231   FUNC(asinh) (0.7L);
1232   if (errno == ENOSYS)
1233     /* Function not implemented.  */
1234     return;
1236   START (asinh);
1238   TEST_f_f (asinh, 0, 0);
1239   TEST_f_f (asinh, minus_zero, minus_zero);
1240 #ifndef TEST_INLINE
1241   TEST_f_f (asinh, plus_infty, plus_infty);
1242   TEST_f_f (asinh, minus_infty, minus_infty);
1243 #endif
1244   TEST_f_f (asinh, qnan_value, qnan_value);
1245   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1247   END (asinh);
1250 static void
1251 atan_test (void)
1253   errno = 0;
1254   FUNC(atan) (0);
1255   if (errno == ENOSYS)
1256     /* Function not implemented.  */
1257     return;
1259   START (atan);
1261   TEST_f_f (atan, 0, 0);
1262   TEST_f_f (atan, minus_zero, minus_zero);
1264   TEST_f_f (atan, plus_infty, M_PI_2l);
1265   TEST_f_f (atan, minus_infty, -M_PI_2l);
1266   TEST_f_f (atan, qnan_value, qnan_value);
1267   TEST_f_f (atan, max_value, M_PI_2l);
1268   TEST_f_f (atan, -max_value, -M_PI_2l);
1270   TEST_f_f (atan, 1, M_PI_4l);
1271   TEST_f_f (atan, -1, -M_PI_4l);
1273   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1275   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1276 #ifndef TEST_FLOAT
1277   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1278 #endif
1279 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1280   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1281 #endif
1283   END (atan);
1288 static void
1289 atanh_test (void)
1291   errno = 0;
1292   FUNC(atanh) (0.7L);
1293   if (errno == ENOSYS)
1294     /* Function not implemented.  */
1295     return;
1297   START (atanh);
1300   TEST_f_f (atanh, 0, 0);
1301   TEST_f_f (atanh, minus_zero, minus_zero);
1303   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1304   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1305   TEST_f_f (atanh, qnan_value, qnan_value);
1307   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1308   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1309   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1310   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1311   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1313   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1315   END (atanh);
1318 static void
1319 atan2_test (void)
1321   errno = 0;
1322   FUNC(atan2) (-0, 1);
1323   if (errno == ENOSYS)
1324     /* Function not implemented.  */
1325     return;
1327   START (atan2);
1329   /* atan2 (0,x) == 0 for x > 0.  */
1330   TEST_ff_f (atan2, 0, 1, 0);
1332   /* atan2 (-0,x) == -0 for x > 0.  */
1333   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1335   TEST_ff_f (atan2, 0, 0, 0);
1336   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1338   /* atan2 (+0,x) == +pi for x < 0.  */
1339   TEST_ff_f (atan2, 0, -1, M_PIl);
1341   /* atan2 (-0,x) == -pi for x < 0.  */
1342   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1344   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1345   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1347   /* atan2 (y,+0) == pi/2 for y > 0.  */
1348   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1350   /* atan2 (y,-0) == pi/2 for y > 0.  */
1351   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1353   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1354   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1356   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1357   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1359   /* atan2 (y,inf) == +0 for finite y > 0.  */
1360   TEST_ff_f (atan2, 1, plus_infty, 0);
1362   /* atan2 (y,inf) == -0 for finite y < 0.  */
1363   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1365   /* atan2(+inf, x) == pi/2 for finite x.  */
1366   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1368   /* atan2(-inf, x) == -pi/2 for finite x.  */
1369   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1371   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1372   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1374   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1375   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1377   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1378   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1379   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1380   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1381   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1383   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1385   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1386   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1388   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1389   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1390   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1391   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1392   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1393   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1395   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1396 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1397   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1398 #endif
1400   END (atan2);
1403 static void
1404 cabs_test (void)
1406   errno = 0;
1407   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1408   if (errno == ENOSYS)
1409     /* Function not implemented.  */
1410     return;
1412   START (cabs);
1414   /* cabs (x + iy) is specified as hypot (x,y) */
1416   /* cabs (+inf + i x) == +inf.  */
1417   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1418   /* cabs (-inf + i x) == +inf.  */
1419   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1421   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1422   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1424   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1426   /* cabs (x,y) == cabs (y,x).  */
1427   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1428   /* cabs (x,y) == cabs (-x,y).  */
1429   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1430   /* cabs (x,y) == cabs (-y,x).  */
1431   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1432   /* cabs (x,y) == cabs (-x,-y).  */
1433   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1434   /* cabs (x,y) == cabs (-y,-x).  */
1435   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1436   /* cabs (x,0) == fabs (x).  */
1437   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1438   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1439   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1440   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1441   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1442   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1444   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1446   END (cabs);
1450 static void
1451 cacos_test (void)
1453   errno = 0;
1454   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1455   if (errno == ENOSYS)
1456     /* Function not implemented.  */
1457     return;
1459   START (cacos);
1462   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1463   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1464   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1465   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1467   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1468   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1470   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1471   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1473   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1474   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1475   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1476   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1477   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1478   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1480   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1481   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1482   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1483   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1485   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1486   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1487   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1488   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1490   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1491   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1493   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1494   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1496   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1497   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1499   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1500   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1502   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1503   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1505   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1507   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1508   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1509   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1510   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1511   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1512   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1513   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1514   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1515   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1516   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1517   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1518   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1520   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1521   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1522   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1523   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1524   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1525   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1526   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1527   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1528   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1529   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1530   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1531   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1533   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1534   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1535   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1536   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1537   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1538   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1539   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1540   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1541 #ifndef TEST_FLOAT
1542   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1543   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1544   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1545   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1546   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1547   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1548   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1549   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1550 #endif
1551 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1552   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1553   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1554   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1555   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1556   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1557   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1558   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1559   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1560 #endif
1562   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1563 #ifndef TEST_FLOAT
1564   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1565 #endif
1566 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1567   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1568 #endif
1570   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1571   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1572   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1573   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1574   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1575   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1576   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1577   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1578 #ifndef TEST_FLOAT
1579   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1580   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1581   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1582   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1583   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1584   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1585   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1586   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1587 #endif
1588 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1589   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1590   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1591   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1592   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1593   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1594   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1595   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1596   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1597 #endif
1599   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1600   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1601   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1602   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1603   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1604   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1605   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1606   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1607   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1608   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1609   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1610   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1611   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1612   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1613   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1614   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1615   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1616   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1617   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1618   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1619   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1620   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1621   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1622   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1623   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1624   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1625   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1626   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1627   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1628   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1629   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1630   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1631   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1632   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1633   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1634   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1635   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1636   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1637   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1638   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1639   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1640   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1641   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1642   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1643   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1644   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1645   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1646   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1647 #ifndef TEST_FLOAT
1648   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1649   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1650   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1651   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1652   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1653   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1654   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1655   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1656   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1657   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1658   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1659   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1660   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1661   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1662   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1663   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1664 #endif
1665 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1666   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1667   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1668   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1669   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1670   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1671   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1672   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1673   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1674   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1675   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1676   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1677   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1678   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1679   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1680   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1681   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1682 #endif
1684   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L);
1685   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L);
1686   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L);
1687   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L);
1688   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L);
1689   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L);
1690   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L);
1691   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L);
1692   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L);
1693   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L);
1694   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L);
1695   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L);
1696   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L);
1697   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L);
1698   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L);
1699   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L);
1700   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1701   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1702   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1703   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1704   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L);
1705   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L);
1706   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L);
1707   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L);
1708 #ifndef TEST_FLOAT
1709   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L);
1710   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L);
1711   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L);
1712   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L);
1713   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L);
1714   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L);
1715   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L);
1716   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L);
1717   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1718   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1719   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1720   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1721   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1722   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1723   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1724   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1725   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1726   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1727   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1728   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1729   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L);
1730   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1731   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L);
1732   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1733 #endif
1734 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1735   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L);
1736   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L);
1737   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L);
1738   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L);
1739   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L);
1740   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L);
1741   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L);
1742   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L);
1743 # if LDBL_MIN_EXP <= -16381
1744   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1745   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1746   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1747   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1748   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L);
1749   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1750   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L);
1751   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1752 # endif
1753   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1754   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1755   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1756   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1757   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L);
1758   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1759   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L);
1760   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1761 #endif
1762 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1763   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L);
1764   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L);
1765   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L);
1766   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L);
1767   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L);
1768   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L);
1769   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L);
1770   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L);
1771   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1772   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1773   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1774   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1775   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L);
1776   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1777   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L);
1778   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1779   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1780   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1781   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1782   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1783   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L);
1784   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1785   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L);
1786   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1787 #endif
1788 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1789   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L);
1790   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L);
1791   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L);
1792   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L);
1793   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L);
1794   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L);
1795   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L);
1796   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L);
1797   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1798   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1799   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1800   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1801   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L);
1802   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1803   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L);
1804   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1805   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1806   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1807   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1808   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1809   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L);
1810   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1811   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L);
1812   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1813 #endif
1815   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1816   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1817   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1818   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1819   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1820   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1821   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1822   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1823   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1824   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1825   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1826   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1827   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1828   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1829   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1830   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1831   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1832   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1833   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1834   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1835   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1836   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1837   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1838   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1839   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1840   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1841   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1842   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1843   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1844   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1845   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1846   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1847   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1848   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1849   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1850   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1851   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1852   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1853   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1854   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1855   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1856   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1857   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
1858   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
1859   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
1860   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
1861   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
1862   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
1863   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1864   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1865   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1866   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1867   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1868   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1869   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1870   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1871   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
1872   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
1873   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
1874   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
1875   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1876   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1877   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1878   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1879 #ifndef TEST_FLOAT
1880   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
1881   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
1882   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
1883   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
1884   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
1885   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
1886   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
1887   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
1888   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1889   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1890   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1891   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1892   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1893   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1894   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1895   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1896   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1897   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1898   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1899   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1900   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
1901   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
1902   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
1903   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
1904 #endif
1905   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
1906   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
1907   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
1908   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
1909   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
1910   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
1911   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
1912   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
1913 #ifndef TEST_FLOAT
1914   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1915   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1916   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1917   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1918   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1919   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1920   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1921   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1922 #endif
1923   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
1924   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
1925   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
1926   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
1927 #ifndef TEST_FLOAT
1928   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1929   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1930   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1931   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1932   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1933   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1934   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1935   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1936 #endif
1937   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1938   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1939   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1940   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1941   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
1942   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
1943   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
1944   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
1945 #ifndef TEST_FLOAT
1946   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1947   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1948   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1949   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1950 #endif
1951 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1952   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
1953   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
1954   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
1955   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
1956   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
1957   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
1958   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
1959   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
1960 # if LDBL_MIN_EXP <= -16381
1961   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1962   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1963   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1964   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1965   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
1966   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
1967   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
1968   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
1969 # endif
1970   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1971   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1972   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1973   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1974   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
1975   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
1976   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
1977   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
1978 #endif
1979   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
1980   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
1981   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
1982   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
1983   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
1984   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
1985   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
1986   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
1987 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1988   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1989   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1990   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1991   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1992   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1993   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1994   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1995   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1996 #endif
1997   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
1998   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
1999   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
2000   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
2001 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2002   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2003   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2004   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2005   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2006   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2007   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2008   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2009   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2010 #endif
2011   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2012   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2013   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2014   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2015   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
2016   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
2017   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
2018   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
2019 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2020   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2021   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2022   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2023   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2024 #endif
2025 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2026   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
2027   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
2028   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
2029   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
2030   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
2031   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
2032   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
2033   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
2034   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2035   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2036   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2037   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2038   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2039   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2040   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2041   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2042   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2043   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2044   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2045   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2046   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
2047   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
2048   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
2049   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
2050 #endif
2051   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
2052   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
2053   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
2054   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2055   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2056   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2057   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2058   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2059   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2060   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2061   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2062   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2063 #ifndef TEST_FLOAT
2064   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2065   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2066   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2067   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2068   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2069   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2070   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2071   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2072 #endif
2073   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2074   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2075   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2076   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2077   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2078   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2079   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2080   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2081 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2082   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2083   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2084   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2085   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2086   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2087   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2088   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2089   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2090   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2091   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2092   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2093   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2094   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2095   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2096   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2097   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2098   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2099   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2100   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2101   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2102   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2103   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2104   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2105   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2106 #endif
2107   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2108   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2109   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2110   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2111   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2112   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2113   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2114   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2115   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2116   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2117   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2118   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2119 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2120   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2121   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2122   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2123   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2124   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2125   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2126   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2127   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2128 #endif
2129   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2130   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2131   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2132   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2133   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2134   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2135   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2136   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2138   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2139   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2141   END (cacos, complex);
2144 static void
2145 cacosh_test (void)
2147   errno = 0;
2148   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2149   if (errno == ENOSYS)
2150     /* Function not implemented.  */
2151     return;
2153   START (cacosh);
2156   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2157   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2158   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2159   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2160   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2161   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2163   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2164   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2166   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2167   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2168   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2169   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2170   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2171   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2173   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2174   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2175   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2176   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2178   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2179   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2180   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2181   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2183   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2184   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2186   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2187   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2189   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2190   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2192   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2193   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2195   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2196   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2198   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2200   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2201   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2202   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2203   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2204   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2205   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2206   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2207   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2208   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2209   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2210   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2211   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2213   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2214   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2215   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2216   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2217   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2218   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2219   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2220   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2221   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2222   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2223   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2224   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2226   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2227   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2228   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2229   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2230   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2231   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2232   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2233   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2234 #ifndef TEST_FLOAT
2235   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2236   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2237   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2238   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2239   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2240   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2241   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2242   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2243 #endif
2244 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2245   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2246   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2247   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2248   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2249   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2250   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2251   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2252   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2253 #endif
2254   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2255 #ifndef TEST_FLOAT
2256   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2257 #endif
2258 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2259   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2260 #endif
2261   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2262   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2263   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2264   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2265   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2266   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2267   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2268   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2269 #ifndef TEST_FLOAT
2270   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2271   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2272   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2273   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2274   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2275   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2276   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2277   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2278 #endif
2279 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2280   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2281   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2282   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2283   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2284   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2285   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2286   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2287   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2288 #endif
2289   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2290   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2291   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2292   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2293   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2294   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2295   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2296   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2297   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2298   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2299   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2300   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2301   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2302   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2303   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2304   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2305   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2306   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2307   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2308   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2309   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2310   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2311   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2312   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2313   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2314   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2315   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2316   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2317   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2318   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2319   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2320   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2321   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2322   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2323   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2324   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2325   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2326   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2327   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2328   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2329   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2330   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2331   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2332   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2333   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2334   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2335   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2336   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2337 #ifndef TEST_FLOAT
2338   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2339   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2340   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2341   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2342   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2343   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2344   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2345   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2346   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2347   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2348   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2349   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2350   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2351   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2352   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2353   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2354 #endif
2355 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2356   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2357   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2358   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2359   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2360   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2361   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2362   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2363   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2364   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2365   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2366   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2367   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2368   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2369   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2370   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2371   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2372 #endif
2373   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2374   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2375   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2376   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2377   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2378   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2379   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2380   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2381   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2382   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2383   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2384   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2385   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2386   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2387   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2388   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2389   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2390   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2391   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2392   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2393   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2394   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2395   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2396   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2397 #ifndef TEST_FLOAT
2398   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2399   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2400   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2401   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2402   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2403   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2404   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2405   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2406   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2407   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2408   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2409   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2410   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2411   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2412   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2413   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2414   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2415   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2416   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2417   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2418   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2419   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2420   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2421   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2422 #endif
2423 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2424   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2425   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2426   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2427   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2428   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2429   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2430   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2431   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2432 # if LDBL_MIN_EXP <= -16381
2433   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2434   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2435   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2436   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2437   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2438   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2439   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2440   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2441 # endif
2442   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2443   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2444   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2445   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2446   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2447   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2448   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2449   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2450 #endif
2451 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2452   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2453   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2454   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2455   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2456   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2457   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2458   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2459   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2460   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2461   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2462   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2463   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2464   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2465   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2466   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2467   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2468   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2469   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2470   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2471   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2472   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2473   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2474   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2475   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2476 #endif
2477 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2478   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2479   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2480   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2481   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2482   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2483   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2484   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2485   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2486   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2487   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2488   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2489   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2490   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2491   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2492   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2493   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2494   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2495   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2496   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2497   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2498   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2499   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2500   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2501   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2502 #endif
2503   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2504   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2505   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2506   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2507   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2508   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2509   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2510   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2511   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2512   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2513   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2514   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2515   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2516   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2517   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2518   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2519   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2520   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2521   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2522   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2523   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2524   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2525   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2526   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2527   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2528   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2529   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2530   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2531   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2532   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2533   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2534   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2535   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2536   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2537   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2538   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2539   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2540   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2541   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2542   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2543   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2544   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2545   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2546   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2547   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2548   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2549   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2550   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2551   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2552   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2553   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2554   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2555   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2556   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2557   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2558   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2559   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2560   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2561   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2562   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2563   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2564   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2565   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2566   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2567 #ifndef TEST_FLOAT
2568   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2569   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2570   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2571   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2572   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2573   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2574   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2575   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2576   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2577   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2578   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2579   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2580   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2581   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2582   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2583   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2584   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2585   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2586   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2587   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2588   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2589   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2590   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2591   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2592 #endif
2593   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2594   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2595   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2596   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2597   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2598   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2599   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2600   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2601 #ifndef TEST_FLOAT
2602   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2603   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2605   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2606   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2607   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2608   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2609   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2610 #endif
2611   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2612   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2613   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2614   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2615 #ifndef TEST_FLOAT
2616   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2617   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2618   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2619   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2620   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2621   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2622   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2623   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2624 #endif
2625   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2626   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2627   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2628   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2629   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2630   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2631   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2632   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2633 #ifndef TEST_FLOAT
2634   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2635   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2636   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2637   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2638 #endif
2639 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2640   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2641   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2642   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2643   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2644   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2645   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2646   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2647   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2648 # if LDBL_MIN_EXP <= -16381
2649   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2650   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2651   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2652   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2653   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2654   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2655   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2656   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2657 # endif
2658   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2659   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2660   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2661   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2662   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2663   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2664   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2665   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2666 #endif
2667   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2668   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2669   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2670   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2671   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2672   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2673   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2674   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2675 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2676   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2677   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2678   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2679   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2680   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2681   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2682   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2683   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2684 #endif
2685   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2686   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2687   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2688   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2689 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2690   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2691   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2692   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2693   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2694   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2695   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2696   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2697   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2698 #endif
2699   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2700   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2701   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2702   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2703   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2704   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2705   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2706   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2707 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2708   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2709   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2710   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2711   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2712 #endif
2713 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2714   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2715   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2716   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2717   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2718   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2719   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2720   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2721   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2722   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2723   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2724   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2725   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2726   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2727   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2728   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2729   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2730   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2731   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2732   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2733   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2734   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2735   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2736   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2737   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2738 #endif
2739   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2740   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2741   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2742   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2743   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2744   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2745   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2746   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2747   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2748   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2749   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2750   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2751 #ifndef TEST_FLOAT
2752   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2753   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2754   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2755   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2756   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2757   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2758   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2759   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2760 #endif
2761   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2762   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2763   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2764   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2765   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2766   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2767   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2768   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2769 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2770   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2771   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2772   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2773   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2774   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2775   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2776   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2777   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2778   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2779   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2780   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2781   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2782   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2783   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2784   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2785   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2786   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2787   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2788   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2789   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2790   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2791   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2792   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2793   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2794 #endif
2795   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2796   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2797   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2798   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2799   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2800   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2801   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2802   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2803   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2804   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2805   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2806   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2807 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2808   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2809   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2810   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2811   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2812   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2813   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2814   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2815   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2816 #endif
2817   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2818   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2819   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2820   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2821   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2822   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2823   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2824   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2826   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2827   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2829   END (cacosh, complex);
2833 static void
2834 carg_test (void)
2836   START (carg);
2838   /* carg (x + iy) is specified as atan2 (y, x) */
2840   /* carg (x + i 0) == 0 for x > 0.  */
2841   TEST_c_f (carg, 2.0, 0, 0);
2842   /* carg (x - i 0) == -0 for x > 0.  */
2843   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2845   TEST_c_f (carg, 0, 0, 0);
2846   TEST_c_f (carg, 0, minus_zero, minus_zero);
2848   /* carg (x + i 0) == +pi for x < 0.  */
2849   TEST_c_f (carg, -2.0, 0, M_PIl);
2851   /* carg (x - i 0) == -pi for x < 0.  */
2852   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2854   TEST_c_f (carg, minus_zero, 0, M_PIl);
2855   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2857   /* carg (+0 + i y) == pi/2 for y > 0.  */
2858   TEST_c_f (carg, 0, 2.0, M_PI_2l);
2860   /* carg (-0 + i y) == pi/2 for y > 0.  */
2861   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
2863   /* carg (+0 + i y) == -pi/2 for y < 0.  */
2864   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
2866   /* carg (-0 + i y) == -pi/2 for y < 0.  */
2867   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
2869   /* carg (inf + i y) == +0 for finite y > 0.  */
2870   TEST_c_f (carg, plus_infty, 2.0, 0);
2872   /* carg (inf + i y) == -0 for finite y < 0.  */
2873   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
2875   /* carg(x + i inf) == pi/2 for finite x.  */
2876   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
2878   /* carg(x - i inf) == -pi/2 for finite x.  */
2879   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
2881   /* carg (-inf + i y) == +pi for finite y > 0.  */
2882   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
2884   /* carg (-inf + i y) == -pi for finite y < 0.  */
2885   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
2887   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
2889   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
2891   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
2893   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
2895   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
2897   END (carg);
2900 static void
2901 casin_test (void)
2903   errno = 0;
2904   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
2905   if (errno == ENOSYS)
2906     /* Function not implemented.  */
2907     return;
2909   START (casin);
2911   TEST_c_c (casin, 0, 0, 0.0, 0.0);
2912   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
2913   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
2914   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
2916   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
2917   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
2918   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
2919   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
2921   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
2922   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
2923   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
2924   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
2925   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
2926   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
2927   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
2928   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
2930   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
2931   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
2932   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
2933   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
2935   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
2936   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
2937   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
2938   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
2940   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
2941   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
2943   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
2944   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
2946   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2947   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2949   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2950   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2952   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2953   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2955   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
2957   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
2958   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
2959   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
2960   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
2961   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
2962   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
2963   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
2964   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
2965   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
2966   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
2967   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
2968   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
2970   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
2971   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
2972   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
2973   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
2974   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
2975   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
2976   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
2977   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
2978   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
2979   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
2980   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
2981   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
2983   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2984   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2985   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2986   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2987   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2988   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2989   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2990   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2991 #ifndef TEST_FLOAT
2992   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2993   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2994   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2995   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2996   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2997   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2998   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2999   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3000 #endif
3001 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3002   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3003   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3004   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3005   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3006   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3007   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3008   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3009   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3010 #endif
3012   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
3013 #ifndef TEST_FLOAT
3014   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
3015 #endif
3016 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3017   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
3018 #endif
3020   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3021   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3022   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3023   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3024   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3025   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3026   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3027   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3028 #ifndef TEST_FLOAT
3029   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3030   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3031   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3032   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3033   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3034   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3035   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3036   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3037 #endif
3038 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3039   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3040   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3041   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3042   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3043   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3044   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3045   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3046   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3047 #endif
3049   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3050   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3051   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3052   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3053   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3054   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3055   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3056   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3057   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3058   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3059   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3060   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3061   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3062   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3063   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3064   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3065   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3066   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3067   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3068   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3069   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3070   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3071   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3072   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3073   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3074   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3075   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3076   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3077   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3078   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3079   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3080   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3081   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3082   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3083   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3084   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3085   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3086   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3087   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3088   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3089   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3090   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3091   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3092   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3093   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3094   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3095   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3096   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3097 #ifndef TEST_FLOAT
3098   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3099   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3100   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3101   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3102   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3103   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3104   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3105   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3106   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3107   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3108   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3109   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3110   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3111   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3112   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3113   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3114 #endif
3115 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3116   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3117   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3118   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3119   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3120   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3121   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3122   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3123   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3124   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3125   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3126   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3127   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3128   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3129   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3130   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3131   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3132 #endif
3134   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3135   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3136   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3137   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3138   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3139   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3140   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3141   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3142   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3143   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3144   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3145   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3146   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3147   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3148   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3149   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3150   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L);
3151   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L);
3152   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L);
3153   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L);
3154   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3155   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3156   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3157   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3158 #ifndef TEST_FLOAT
3159   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3160   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3161   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3162   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3163   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3164   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3165   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3166   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3167   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3168   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3169   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3170   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3171   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3172   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3173   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3174   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3175   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L);
3176   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L);
3177   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L);
3178   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L);
3179   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3180   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3181   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3182   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3183 #endif
3184 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3185   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3186   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3187   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3188   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3189   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3190   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3191   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3192   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3193 # if LDBL_MIN_EXP <= -16381
3194   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3195   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3196   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3197   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3198   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3199   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3200   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3201   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3202 # endif
3203   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L);
3204   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L);
3205   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L);
3206   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L);
3207   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3208   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3209   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3210   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3211 #endif
3212 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3213   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3214   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3215   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3216   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3217   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3218   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3219   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3220   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3221   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3222   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3223   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3224   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3225   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3226   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3227   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3228   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3229   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L);
3230   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L);
3231   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L);
3232   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L);
3233   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3234   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3235   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3236   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3237 #endif
3238 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3239   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3240   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3241   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3242   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3243   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3244   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3245   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3246   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3247   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3248   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3249   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3250   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3251   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3252   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3253   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3254   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3255   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L);
3256   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L);
3257   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L);
3258   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L);
3259   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3260   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3261   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3262   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3263 #endif
3265   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3266   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3267   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3268   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3269   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3270   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3271   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3272   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3273   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3274   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3275   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3276   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3277   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3278   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3279   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3280   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3281   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3282   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3283   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3284   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3285   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3286   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3287   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3288   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3289   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3290   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3291   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3292   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3293   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3294   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3295   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3296   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3297   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3298   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3299   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3300   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3301   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3302   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3303   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3304   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3305   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3306   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3307   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3308   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3309   /* Bug 15319: underflow exception may be missing.  */
3310   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3311   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3312   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3313   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3314   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3315   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3316   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3317   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3318   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3319   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3320   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3321   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3322   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3323   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3324   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3325   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3326   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3327   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3328   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3329   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3330 #ifndef TEST_FLOAT
3331   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3332   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3333   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3334   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3335   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3336   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3337   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3338   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3339   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3340   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3341   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3342   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3343   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3344   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3345   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3346   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3347   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3348   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3349   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3350   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3351   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3352   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3353   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3354   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3355 #endif
3356   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3357   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3358   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3359   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3360   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3361   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3362   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3363   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3364 #ifndef TEST_FLOAT
3365   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3366   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3367   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3368   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3369   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3370   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3371   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3372   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3373 #endif
3374   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3375   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3376   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3377   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3378 #ifndef TEST_FLOAT
3379   /* Bug 15319: underflow exception may be missing.  */
3380   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3381   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3382   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3383   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3384   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3385   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3386   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3387   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3388 #endif
3389   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3390   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3391   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3392   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3393   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3394   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3395   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3396   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3397 #ifndef TEST_FLOAT
3398   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3399   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3400   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3401   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3402 #endif
3403 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3404   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3405   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3406   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3407   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3408   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3409   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3410   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3411   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3412 # if LDBL_MIN_EXP <= -16381
3413   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3414   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3415   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3416   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3417   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3418   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3419   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3420   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3421 # endif
3422   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3423   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3424   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3425   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3426   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3427   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3428   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3429   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3430 #endif
3431   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3432   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3433   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3434   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3435   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3436   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3437   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3438   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3439 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3440   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3441   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3442   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3443   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3444   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3445   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3446   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3447   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3448 #endif
3449   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3450   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3451   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3452   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3453 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3454   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3455   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3456   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3457   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3458   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3459   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3460   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3461   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3462 #endif
3463   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3464   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3465   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3466   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3467   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3468   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3469   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3470   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3471 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3472   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3473   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3474   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3475   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3476 #endif
3477 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3478   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3479   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3480   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3481   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3482   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3483   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3484   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3485   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3486   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3487   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3488   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3489   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3490   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3491   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3492   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3493   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3494   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3495   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3496   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3497   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3498   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3499   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3500   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3501   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3502 #endif
3503   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3504   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3505   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3506   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3507   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3508   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3509   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3510   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3511   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3512   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3513   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3514   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3515 #ifndef TEST_FLOAT
3516   /* Bug 15319: underflow exception may be missing.  */
3517   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3518   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3519   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3520   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3521   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3522   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3523   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3524   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3525 #endif
3526   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3527   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3528   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3529   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3530   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3531   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3532   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3533   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3534 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3535   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3536   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3537   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3538   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3539   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3540   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3541   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3542   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3543   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3544   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3545   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3546   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3547   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3548   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3549   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3550   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3551   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3552   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3553   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3554   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3555   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3556   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3557   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3558   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3559 #endif
3560   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3561   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3562   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3563   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3564   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3565   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3566   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3567   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3568   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3569   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3570   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3571   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3572 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3573   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3574   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3575   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3576   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3577   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3578   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3579   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3580   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3581 #endif
3582   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3583   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3584   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3585   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3586   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3587   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3588   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3589   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3591   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3592   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3594   END (casin, complex);
3598 static void
3599 casinh_test (void)
3601   errno = 0;
3602   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3603   if (errno == ENOSYS)
3604     /* Function not implemented.  */
3605     return;
3607   START (casinh);
3609   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3610   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3611   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3612   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3614   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3615   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3616   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3617   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3619   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3620   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3621   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3622   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3623   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3624   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3625   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3626   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3628   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3629   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3630   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3631   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3633   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3634   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3635   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3636   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3638   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3639   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3641   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3642   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3644   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3645   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3647   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3648   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3650   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3651   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3653   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3655   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3656   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3657   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3658   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3659   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3660   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3661   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3662   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3663   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3664   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3665   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3666   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3668   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3669   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3670   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3671   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3672   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3673   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3674   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3675   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3676   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3677   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3678   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3679   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3681   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3682   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3683   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3684   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3685   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3686   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3687   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3688   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3689 #ifndef TEST_FLOAT
3690   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3691   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3692   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3693   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3694   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3695   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3696   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3697   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3698 #endif
3699 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3700   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3701   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3702   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3703   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3704   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3705   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3706   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3707   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3708 #endif
3710   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3711 #ifndef TEST_FLOAT
3712   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3713 #endif
3714 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3715   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3716 #endif
3718   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3719   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3720   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3721   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3722   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3723   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3724   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3725   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3726 #ifndef TEST_FLOAT
3727   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3728   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3729   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3730   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3731   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3732   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3733   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3734   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3735 #endif
3736 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3737   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3738   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3739   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3740   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3741   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3742   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3743   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3744   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3745 #endif
3747   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3748   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3749   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3750   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3751   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3752   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3753   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3754   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3755   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3756   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3757   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3758   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3759   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3760   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3761   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3762   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3763   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3764   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3765   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3766   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3767   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3768   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3769   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3770   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3771   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3772   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3773   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3774   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3775   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3776   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3777   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3778   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3779   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3780   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3781   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3782   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3783   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3784   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3785   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3786   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3787   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3788   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3789   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3790   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3791   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3792   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3793   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3794   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3795 #ifndef TEST_FLOAT
3796   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3797   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3798   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3799   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3800   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3801   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3802   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3803   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3804   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3805   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3806   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3807   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3808   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3809   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3810   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3811   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3812 #endif
3813 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3814   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3815   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3816   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3817   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3818   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3819   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3820   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3821   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3822   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3823   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3824   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3825   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3826   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3827   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3828   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3829   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3830 #endif
3832   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3833   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3834   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3835   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3836   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3837   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3838   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3839   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3840   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3841   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3842   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3843   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3844   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3845   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3846   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3847   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3848   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3849   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3850   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3851   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3852   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L);
3853   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L);
3854   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L);
3855   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L);
3856 #ifndef TEST_FLOAT
3857   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
3858   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
3859   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
3860   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
3861   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
3862   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
3863   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
3864   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
3865   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3866   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3867   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3868   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3869   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3870   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3871   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3872   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3873   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3874   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3875   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3876   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3877   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L);
3878   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L);
3879   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L);
3880   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L);
3881 #endif
3882 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3883   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
3884   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
3885   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
3886   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
3887   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
3888   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
3889   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
3890   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
3891 # if LDBL_MIN_EXP <= -16381
3892   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3893   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3894   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3895   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3896   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3897   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3898   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3899   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3900 # endif
3901   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3902   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3903   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3904   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3905   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L);
3906   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L);
3907   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L);
3908   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L);
3909 #endif
3910 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3911   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
3912   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
3913   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
3914   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
3915   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
3916   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
3917   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
3918   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
3919   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3920   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3921   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3922   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3923   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3924   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3925   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3926   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3927   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3928   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3929   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3930   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3931   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L);
3932   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L);
3933   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L);
3934   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L);
3935 #endif
3936 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3937   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
3938   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
3939   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
3940   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
3941   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
3942   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
3943   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
3944   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
3945   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3946   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3947   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3948   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3949   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3950   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3951   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3952   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3953   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3954   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3955   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3956   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3957   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L);
3958   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L);
3959   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L);
3960   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L);
3961 #endif
3963   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3964   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3965   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3966   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3967   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3968   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3969   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3970   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3971   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3972   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3973   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3974   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3975   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3976   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3977   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3978   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3979   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
3980   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
3981   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
3982   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
3983   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
3984   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
3985   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
3986   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
3987   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3988   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3989   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3990   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3991   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3992   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3993   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3994   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3995   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3996   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3997   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3998   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3999   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4000   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4001   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4002   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4003   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4004   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4005   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4006   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4007   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4008   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4009   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4010   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4011   /* Bug 15319: underflow exception may be missing.  */
4012   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4013   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4014   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4015   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4016   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
4017   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
4018   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
4019   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
4020   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
4021   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
4022   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
4023   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
4024   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4025   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4026   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4027   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4028 #ifndef TEST_FLOAT
4029   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4030   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4031   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4032   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4033   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4034   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4035   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4036   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4037   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4038   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4039   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4040   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4041   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4042   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4043   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4044   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4045   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
4046   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
4047   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
4048   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
4049   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
4050   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
4051   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
4052   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
4053 #endif
4054   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4055   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4056   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4057   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4058   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4059   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4060   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4061   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4062 #ifndef TEST_FLOAT
4063   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4064   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4065   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4066   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4067   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4068   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4069   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4070   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4071 #endif
4072   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4073   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4074   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4075   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4076 #ifndef TEST_FLOAT
4077   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4078   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4079   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4080   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4081   /* Bug 15319: underflow exception may be missing.  */
4082   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4083   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4084   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4085   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4086 #endif
4087   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4088   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4089   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4090   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4091   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4092   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4093   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4094   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4095 #ifndef TEST_FLOAT
4096   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4097   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4098   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4099   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4100 #endif
4101 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4102   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4103   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4104   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4105   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4106   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4107   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4108   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4109   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4110 # if LDBL_MIN_EXP <= -16381
4111   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4112   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4113   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4114   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4115   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4116   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4117   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4118   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4119 # endif
4120   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4121   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4122   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4123   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4124   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4125   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4126   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4127   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4128 #endif
4129   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4130   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4131   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4132   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4133   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4134   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4135   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4136   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4137 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4138   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4139   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4140   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4141   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4142   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4143   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4144   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4145   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4146 #endif
4147   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4148   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4149   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4150   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4151 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4152   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4153   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4154   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4155   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4156   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4157   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4158   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4159   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4160 #endif
4161   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4162   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4163   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4164   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4165   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4166   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4167   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4168   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4169 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4170   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4171   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4172   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4173   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4174 #endif
4175 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4176   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4177   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4178   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4179   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4180   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4181   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4182   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4183   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4184   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4185   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4186   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4187   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4188   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4189   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4190   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4191   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4192   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4193   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4194   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4195   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4196   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4197   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4198   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4199   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4200 #endif
4201   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4202   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4203   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4204   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4205   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4206   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4207   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4208   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4209   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4210   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4211   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4212   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4213 #ifndef TEST_FLOAT
4214   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4215   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4216   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4217   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4218   /* Bug 15319: underflow exception may be missing.  */
4219   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4220   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4221   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4222   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4223 #endif
4224   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4225   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4226   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4227   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4228   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4229   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4230   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4231   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4232 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4233   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4234   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4235   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4236   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4237   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4238   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4239   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4240   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4241   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4242   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4243   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4244   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4245   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4246   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4247   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4248   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4249   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4250   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4251   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4252   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4253   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4254   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4255   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4256   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4257 #endif
4258   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4259   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4260   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4261   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4262   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4263   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4264   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4265   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4266   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4267   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4268   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4269   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4270 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4271   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4272   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4273   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4274   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4275   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4276   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4277   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4278   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4279 #endif
4280   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4281   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4282   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4283   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4284   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4285   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4286   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4287   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4289   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4290   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4292   END (casinh, complex);
4296 static void
4297 catan_test (void)
4299   errno = 0;
4300   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4301   if (errno == ENOSYS)
4302     /* Function not implemented.  */
4303     return;
4305   START (catan);
4307   TEST_c_c (catan, 0, 0, 0, 0);
4308   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4309   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4310   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4312   TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero);
4313   TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero);
4314   TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero);
4315   TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero);
4316   TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4317   TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4318   TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4319   TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4321   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4322   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4323   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4324   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4327   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4328   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4329   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4330   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4331   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4332   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4333   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4334   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4336   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4337   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4338   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4339   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4341   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4342   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4343   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4344   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4346   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4347   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4349   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4350   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4352   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4353   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4355   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4356   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4358   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4359   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4361   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4362   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4364   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4366   TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L);
4367   TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L);
4368   TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L);
4369   TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L);
4370   TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4371   TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4372   TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4373   TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4374 #ifndef TEST_FLOAT
4375   TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4376   TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4377   TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4378   TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4379   TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4380   TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4381   TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4382   TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4383 #endif
4384 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4385   TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4386   TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4387   TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4388   TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4389   TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4390   TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4391   TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4392   TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4393 #endif
4394   TEST_c_c (catan, 0x1p63L, 0.5L, 1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4395   TEST_c_c (catan, 0x1p63L, -0.5L, 1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4396   TEST_c_c (catan, -0x1p63L, 0.5L, -1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4397   TEST_c_c (catan, -0x1p63L, -0.5L, -1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4398   TEST_c_c (catan, 0.5L, 0x1p63L, 1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4399   TEST_c_c (catan, -0.5L, 0x1p63L, -1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4400   TEST_c_c (catan, 0.5L, -0x1p63L, 1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4401   TEST_c_c (catan, -0.5L, -0x1p63L, -1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4402 #ifndef TEST_FLOAT
4403   TEST_c_c (catan, 0x1p511L, 0.5L, 1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4404   TEST_c_c (catan, 0x1p511L, -0.5L, 1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4405   TEST_c_c (catan, -0x1p511L, 0.5L, -1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4406   TEST_c_c (catan, -0x1p511L, -0.5L, -1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4407   TEST_c_c (catan, 0.5L, 0x1p511L, 1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4408   TEST_c_c (catan, -0.5L, 0x1p511L, -1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4409   TEST_c_c (catan, 0.5L, -0x1p511L, 1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4410   TEST_c_c (catan, -0.5L, -0x1p511L, -1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4411 #endif
4412 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4413   TEST_c_c (catan, 0x1p8191L, 0.5L, 1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4414   TEST_c_c (catan, 0x1p8191L, -0.5L, 1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4415   TEST_c_c (catan, -0x1p8191L, 0.5L, -1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4416   TEST_c_c (catan, -0x1p8191L, -0.5L, -1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4417   TEST_c_c (catan, 0.5L, 0x1p8191L, 1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4418   TEST_c_c (catan, -0.5L, 0x1p8191L, -1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4419   TEST_c_c (catan, 0.5L, -0x1p8191L, 1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4420   TEST_c_c (catan, -0.5L, -0x1p8191L, -1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4421 #endif
4422   TEST_c_c (catan, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L, 0.0L);
4423   TEST_c_c (catan, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L, -0.0L);
4424   TEST_c_c (catan, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L, 0.0L);
4425   TEST_c_c (catan, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L, -0.0L);
4426   TEST_c_c (catan, 0.0L, 0x1p100L, 1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4427   TEST_c_c (catan, -0.0L, 0x1p100L, -1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4428   TEST_c_c (catan, 0.0L, -0x1p100L, 1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4429   TEST_c_c (catan, -0.0L, -0x1p100L, -1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4430   TEST_c_c (catan, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L, 0.0L);
4431   TEST_c_c (catan, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L, -0.0L);
4432   TEST_c_c (catan, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L, 0.0L);
4433   TEST_c_c (catan, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L, -0.0L);
4434   TEST_c_c (catan, 0.0L, 0x1.fp127L, 1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4435   TEST_c_c (catan, -0.0L, 0x1.fp127L, -1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4436   TEST_c_c (catan, 0.0L, -0x1.fp127L, 1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4437   TEST_c_c (catan, -0.0L, -0x1.fp127L, -1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4438   TEST_c_c (catan, 0x1.fp127L, 0x1.fp127L, 1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4439   TEST_c_c (catan, 0x1.fp127L, -0x1.fp127L, 1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4440   TEST_c_c (catan, -0x1.fp127L, 0x1.fp127L, -1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4441   TEST_c_c (catan, -0x1.fp127L, -0x1.fp127L, -1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4442 #ifndef TEST_FLOAT
4443   TEST_c_c (catan, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4444   TEST_c_c (catan, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4445   TEST_c_c (catan, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4446   TEST_c_c (catan, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4447   TEST_c_c (catan, 0.0L, 0x1p900L, 1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4448   TEST_c_c (catan, -0.0L, 0x1p900L, -1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4449   TEST_c_c (catan, 0.0L, -0x1p900L, 1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4450   TEST_c_c (catan, -0.0L, -0x1p900L, -1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4451   TEST_c_c (catan, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4452   TEST_c_c (catan, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4453   TEST_c_c (catan, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4454   TEST_c_c (catan, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4455   TEST_c_c (catan, 0.0L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4456   TEST_c_c (catan, -0.0L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4457   TEST_c_c (catan, 0.0L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4458   TEST_c_c (catan, -0.0L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4459   TEST_c_c (catan, 0x1.fp1023L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4460   TEST_c_c (catan, 0x1.fp1023L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4461   TEST_c_c (catan, -0x1.fp1023L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4462   TEST_c_c (catan, -0x1.fp1023L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4463 #endif
4464 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4465   TEST_c_c (catan, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4466   TEST_c_c (catan, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4467   TEST_c_c (catan, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4468   TEST_c_c (catan, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4469   TEST_c_c (catan, 0.0L, 0x1p10000L, 1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4470   TEST_c_c (catan, -0.0L, 0x1p10000L, -1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4471   TEST_c_c (catan, 0.0L, -0x1p10000L, 1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4472   TEST_c_c (catan, -0.0L, -0x1p10000L, -1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4473   TEST_c_c (catan, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4474   TEST_c_c (catan, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4475   TEST_c_c (catan, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4476   TEST_c_c (catan, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4477   TEST_c_c (catan, 0.0L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4478   TEST_c_c (catan, -0.0L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4479   TEST_c_c (catan, 0.0L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4480   TEST_c_c (catan, -0.0L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4481   TEST_c_c (catan, 0x1.fp16383L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4482   TEST_c_c (catan, 0x1.fp16383L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4483   TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4484   TEST_c_c (catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4485 #endif
4486   TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4487   TEST_c_c (catan, 0x1p-13L, -1.0L, 7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4488   TEST_c_c (catan, -0x1p-13L, 1.0L, -7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4489   TEST_c_c (catan, -0x1p-13L, -1.0L, -7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4490   TEST_c_c (catan, 1.0L, 0x1p-13L, 7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4491   TEST_c_c (catan, -1.0L, 0x1p-13L, -7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4492   TEST_c_c (catan, 1.0L, -0x1p-13L, 7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4493   TEST_c_c (catan, -1.0L, -0x1p-13L, -7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4494   TEST_c_c (catan, 0x1p-27L, 1.0L, 7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4495   TEST_c_c (catan, 0x1p-27L, -1.0L, 7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4496   TEST_c_c (catan, -0x1p-27L, 1.0L, -7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4497   TEST_c_c (catan, -0x1p-27L, -1.0L, -7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4498   TEST_c_c (catan, 1.0L, 0x1p-27L, 7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4499   TEST_c_c (catan, -1.0L, 0x1p-27L, -7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4500   TEST_c_c (catan, 1.0L, -0x1p-27L, 7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4501   TEST_c_c (catan, -1.0L, -0x1p-27L, -7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4502   TEST_c_c (catan, 0x1p-33L, 1.0L, 7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4503   TEST_c_c (catan, 0x1p-33L, -1.0L, 7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4504   TEST_c_c (catan, -0x1p-33L, 1.0L, -7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4505   TEST_c_c (catan, -0x1p-33L, -1.0L, -7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4506   TEST_c_c (catan, 1.0L, 0x1p-33L, 7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4507   TEST_c_c (catan, -1.0L, 0x1p-33L, -7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4508   TEST_c_c (catan, 1.0L, -0x1p-33L, 7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4509   TEST_c_c (catan, -1.0L, -0x1p-33L, -7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4510   TEST_c_c (catan, 0x1p-54L, 1.0L, 7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4511   TEST_c_c (catan, 0x1p-54L, -1.0L, 7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4512   TEST_c_c (catan, -0x1p-54L, 1.0L, -7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4513   TEST_c_c (catan, -0x1p-54L, -1.0L, -7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4514   TEST_c_c (catan, 1.0L, 0x1p-54L, 7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4515   TEST_c_c (catan, -1.0L, 0x1p-54L, -7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4516   TEST_c_c (catan, 1.0L, -0x1p-54L, 7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4517   TEST_c_c (catan, -1.0L, -0x1p-54L, -7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4518   TEST_c_c (catan, 0x1p-57L, 1.0L, 7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4519   TEST_c_c (catan, 0x1p-57L, -1.0L, 7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4520   TEST_c_c (catan, -0x1p-57L, 1.0L, -7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4521   TEST_c_c (catan, -0x1p-57L, -1.0L, -7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4522   TEST_c_c (catan, 1.0L, 0x1p-57L, 7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4523   TEST_c_c (catan, -1.0L, 0x1p-57L, -7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4524   TEST_c_c (catan, 1.0L, -0x1p-57L, 7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4525   TEST_c_c (catan, -1.0L, -0x1p-57L, -7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4526   TEST_c_c (catan, 0x1p-13L, 0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4527   TEST_c_c (catan, 0x1p-13L, -0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4528   TEST_c_c (catan, -0x1p-13L, 0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4529   TEST_c_c (catan, -0x1p-13L, -0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4530   TEST_c_c (catan, 0x1.000002p0L, 0x1p-13L, 7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4531   TEST_c_c (catan, -0x1.000002p0L, 0x1p-13L, -7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4532   TEST_c_c (catan, 0x1.000002p0L, -0x1p-13L, 7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4533   TEST_c_c (catan, -0x1.000002p0L, -0x1p-13L, -7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4534   TEST_c_c (catan, 0x1p-13L, 0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4535   TEST_c_c (catan, 0x1p-13L, -0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4536   TEST_c_c (catan, -0x1p-13L, 0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4537   TEST_c_c (catan, -0x1p-13L, -0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4538   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-13L, 7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4539   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-13L, -7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4540   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-13L, 7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4541   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-13L, -7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4542 #ifndef TEST_FLOAT
4543   TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4544   TEST_c_c (catan, 0x1p-27L, -0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4545   TEST_c_c (catan, -0x1p-27L, 0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4546   TEST_c_c (catan, -0x1p-27L, -0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4547   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4548   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4549   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4550   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4551   TEST_c_c (catan, 0x1p-27L, 0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4552   TEST_c_c (catan, 0x1p-27L, -0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4553   TEST_c_c (catan, -0x1p-27L, 0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4554   TEST_c_c (catan, -0x1p-27L, -0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4555   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4556   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4557   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4558   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4559 #endif
4560 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4561   TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4562   TEST_c_c (catan, 0x1p-33L, -0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4563   TEST_c_c (catan, -0x1p-33L, 0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4564   TEST_c_c (catan, -0x1p-33L, -0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4565   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4566   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4567   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4568   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4569   TEST_c_c (catan, 0x1p-33L, 0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4570   TEST_c_c (catan, 0x1p-33L, -0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4571   TEST_c_c (catan, -0x1p-33L, 0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4572   TEST_c_c (catan, -0x1p-33L, -0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4573   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4574   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4575   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4576   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4577 #endif
4578 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4579   TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4580   TEST_c_c (catan, 0x1p-54L, -0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4581   TEST_c_c (catan, -0x1p-54L, 0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4582   TEST_c_c (catan, -0x1p-54L, -0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4583   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-54L, 7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4584   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-54L, -7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4585   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-54L, 7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4586   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-54L, -7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4587   TEST_c_c (catan, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4588   TEST_c_c (catan, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4589   TEST_c_c (catan, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4590   TEST_c_c (catan, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4591   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4592   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4593   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4594   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4595 #endif
4596 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4597   TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4598   TEST_c_c (catan, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4599   TEST_c_c (catan, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4600   TEST_c_c (catan, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4601   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4602   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4603   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4604   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4605   TEST_c_c (catan, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4606   TEST_c_c (catan, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4607   TEST_c_c (catan, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4608   TEST_c_c (catan, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4609   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4610   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4611   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4612   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4613 #endif
4614   TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4615   TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4616   TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4617   TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4618   TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4619   TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4620   TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4621   TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4622   TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4623   TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4624   TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4625   TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4626   TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4627   TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4628   TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4629   TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4630   TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4631   TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4632   TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4633   TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4634   TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4635   TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4636   TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4637   TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4638   TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4639   TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4640   TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4641   TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4642   TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4643   TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4644   TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4645   TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4646   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4647   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4648   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4649   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4650   TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4651   TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4652   TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4653   TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4654 #ifndef TEST_FLOAT
4655   TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4656   TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4657   TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4658   TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4659   TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4660   TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4661   TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4662   TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4663   TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4664   TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4665   TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4666   TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4667   TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4668   TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4669   TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4670   TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4671   TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4672   TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4673   TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4674   TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4675   TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4676   TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4677   TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4678   TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4679   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4680   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4681   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4682   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4683   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4684   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4685   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4686   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4687   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4688   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4689   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4690   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4691   TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4692   TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4693   TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4694   TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4695 #endif
4696 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4697   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4698   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4699   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4700   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4701   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4702   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4703   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4704   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4705   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4706   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4707   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4708   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4709   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4710   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4711   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4712   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4713 #endif
4714 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4715   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4716   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4717   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4718   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4719   TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4720   TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4721   TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4722   TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4723   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4724   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4725   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4726   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4727   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4728   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4729   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4730   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4731 #endif
4732 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4733   TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4734   TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4735   TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4736   TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4737   TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4738   TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4739   TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4740   TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4741   TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4742   TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4743   TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4744   TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4745   TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4746   TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4747   TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4748   TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4749   TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4750   TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4751   TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4752   TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4753   TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4754   TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4755   TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4756   TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4757   TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4758   TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4759   TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4760   TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4761   TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4762   TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4763   TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4764   TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4765   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4766   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4767   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4768   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4769   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4770   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4771   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4772   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4773   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4774   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4775   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4776   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4777   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4778   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4779   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4780   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4781 # if LDBL_MANT_DIG >= 113
4782   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4783   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4784   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4785   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4786   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4787   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4788   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4789   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4790   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4791   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4792   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4793   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4794   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4795   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4796   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4797   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4798 # endif
4799 #endif
4801   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4802   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4804   END (catan, complex);
4807 static void
4808 catanh_test (void)
4810   errno = 0;
4811   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4812   if (errno == ENOSYS)
4813     /* Function not implemented.  */
4814     return;
4816   START (catanh);
4818   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4819   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4820   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4821   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4823   TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4824   TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4825   TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4826   TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4827   TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l);
4828   TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l);
4829   TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l);
4830   TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l);
4832   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4833   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4834   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4835   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4837   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4838   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4839   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4840   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4841   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4842   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4843   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4844   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4846   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4847   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4848   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4849   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4851   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4852   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4853   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4854   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4856   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
4857   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
4859   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
4860   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
4862   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
4863   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
4865   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
4866   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
4868   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4869   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4871   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4872   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4874   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
4876   TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4877   TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4878   TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4879   TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4880   TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L);
4881   TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L);
4882   TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L);
4883   TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L);
4884 #ifndef TEST_FLOAT
4885   TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4886   TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4887   TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4888   TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4889   TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L);
4890   TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L);
4891   TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L);
4892   TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L);
4893 #endif
4894 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4895   TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4896   TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4897   TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4898   TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4899   TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L);
4900   TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L);
4901   TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L);
4902   TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L);
4903 #endif
4904   TEST_c_c (catanh, 0x1p63L, 0.5L, 1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
4905   TEST_c_c (catanh, 0x1p63L, -0.5L, 1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
4906   TEST_c_c (catanh, -0x1p63L, 0.5L, -1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
4907   TEST_c_c (catanh, -0x1p63L, -0.5L, -1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
4908   TEST_c_c (catanh, 0.5L, 0x1p63L, 5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4909   TEST_c_c (catanh, -0.5L, 0x1p63L, -5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4910   TEST_c_c (catanh, 0.5L, -0x1p63L, 5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4911   TEST_c_c (catanh, -0.5L, -0x1p63L, -5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4912 #ifndef TEST_FLOAT
4913   TEST_c_c (catanh, 0x1p511L, 0.5L, 1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
4914   TEST_c_c (catanh, 0x1p511L, -0.5L, 1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
4915   TEST_c_c (catanh, -0x1p511L, 0.5L, -1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
4916   TEST_c_c (catanh, -0x1p511L, -0.5L, -1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
4917   TEST_c_c (catanh, 0.5L, 0x1p511L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4918   TEST_c_c (catanh, -0.5L, 0x1p511L, -1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4919   TEST_c_c (catanh, 0.5L, -0x1p511L, 1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4920   TEST_c_c (catanh, -0.5L, -0x1p511L, -1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4921 #endif
4922 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4923   TEST_c_c (catanh, 0x1p8191L, 0.5L, 1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
4924   TEST_c_c (catanh, 0x1p8191L, -0.5L, 1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
4925   TEST_c_c (catanh, -0x1p8191L, 0.5L, -1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
4926   TEST_c_c (catanh, -0x1p8191L, -0.5L, -1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
4927   TEST_c_c (catanh, 0.5L, 0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4928   TEST_c_c (catanh, -0.5L, 0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4929   TEST_c_c (catanh, 0.5L, -0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4930   TEST_c_c (catanh, -0.5L, -0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4931 #endif
4932   TEST_c_c (catanh, 0x1p100L, 0.0L, 7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
4933   TEST_c_c (catanh, 0x1p100L, -0.0L, 7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
4934   TEST_c_c (catanh, -0x1p100L, 0.0L, -7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
4935   TEST_c_c (catanh, -0x1p100L, -0.0L, -7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
4936   TEST_c_c (catanh, 0.0L, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L);
4937   TEST_c_c (catanh, -0.0L, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L);
4938   TEST_c_c (catanh, 0.0L, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L);
4939   TEST_c_c (catanh, -0.0L, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L);
4940   TEST_c_c (catanh, 0x1.fp127L, 0.0L, 3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4941   TEST_c_c (catanh, 0x1.fp127L, -0.0L, 3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4942   TEST_c_c (catanh, -0x1.fp127L, 0.0L, -3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4943   TEST_c_c (catanh, -0x1.fp127L, -0.0L, -3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4944   TEST_c_c (catanh, 0.0L, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L);
4945   TEST_c_c (catanh, -0.0L, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L);
4946   TEST_c_c (catanh, 0.0L, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L);
4947   TEST_c_c (catanh, -0.0L, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L);
4948   TEST_c_c (catanh, 0x1.fp127L, 0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4949   TEST_c_c (catanh, 0x1.fp127L, -0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4950   TEST_c_c (catanh, -0x1.fp127L, 0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4951   TEST_c_c (catanh, -0x1.fp127L, -0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4952 #ifndef TEST_FLOAT
4953   TEST_c_c (catanh, 0x1p900L, 0.0L, 1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
4954   TEST_c_c (catanh, 0x1p900L, -0.0L, 1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
4955   TEST_c_c (catanh, -0x1p900L, 0.0L, -1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
4956   TEST_c_c (catanh, -0x1p900L, -0.0L, -1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
4957   TEST_c_c (catanh, 0.0L, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L);
4958   TEST_c_c (catanh, -0.0L, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L);
4959   TEST_c_c (catanh, 0.0L, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L);
4960   TEST_c_c (catanh, -0.0L, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L);
4961   TEST_c_c (catanh, 0x1.fp1023L, 0.0L, 5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4962   TEST_c_c (catanh, 0x1.fp1023L, -0.0L, 5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4963   TEST_c_c (catanh, -0x1.fp1023L, 0.0L, -5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4964   TEST_c_c (catanh, -0x1.fp1023L, -0.0L, -5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4965   TEST_c_c (catanh, 0.0L, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L);
4966   TEST_c_c (catanh, -0.0L, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L);
4967   TEST_c_c (catanh, 0.0L, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L);
4968   TEST_c_c (catanh, -0.0L, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L);
4969   TEST_c_c (catanh, 0x1.fp1023L, 0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4970   TEST_c_c (catanh, 0x1.fp1023L, -0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4971   TEST_c_c (catanh, -0x1.fp1023L, 0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4972   TEST_c_c (catanh, -0x1.fp1023L, -0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4973 #endif
4974 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4975   TEST_c_c (catanh, 0x1p10000L, 0.0L, 5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
4976   TEST_c_c (catanh, 0x1p10000L, -0.0L, 5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
4977   TEST_c_c (catanh, -0x1p10000L, 0.0L, -5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
4978   TEST_c_c (catanh, -0x1p10000L, -0.0L, -5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
4979   TEST_c_c (catanh, 0.0L, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L);
4980   TEST_c_c (catanh, -0.0L, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L);
4981   TEST_c_c (catanh, 0.0L, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L);
4982   TEST_c_c (catanh, -0.0L, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L);
4983   TEST_c_c (catanh, 0x1.fp16383L, 0.0L, 8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4984   TEST_c_c (catanh, 0x1.fp16383L, -0.0L, 8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4985   TEST_c_c (catanh, -0x1.fp16383L, 0.0L, -8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4986   TEST_c_c (catanh, -0x1.fp16383L, -0.0L, -8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4987   TEST_c_c (catanh, 0.0L, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L);
4988   TEST_c_c (catanh, -0.0L, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L);
4989   TEST_c_c (catanh, 0.0L, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L);
4990   TEST_c_c (catanh, -0.0L, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L);
4991   TEST_c_c (catanh, 0x1.fp16383L, 0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4992   TEST_c_c (catanh, 0x1.fp16383L, -0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4993   TEST_c_c (catanh, -0x1.fp16383L, 0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4994   TEST_c_c (catanh, -0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4995 #endif
4996   TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
4997   TEST_c_c (catanh, 0x1p-13L, -1.0L, 6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
4998   TEST_c_c (catanh, -0x1p-13L, 1.0L, -6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
4999   TEST_c_c (catanh, -0x1p-13L, -1.0L, -6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5000   TEST_c_c (catanh, 1.0L, 0x1p-13L, 4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5001   TEST_c_c (catanh, -1.0L, 0x1p-13L, -4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5002   TEST_c_c (catanh, 1.0L, -0x1p-13L, 4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5003   TEST_c_c (catanh, -1.0L, -0x1p-13L, -4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5004   TEST_c_c (catanh, 0x1p-27L, 1.0L, 3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5005   TEST_c_c (catanh, 0x1p-27L, -1.0L, 3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5006   TEST_c_c (catanh, -0x1p-27L, 1.0L, -3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5007   TEST_c_c (catanh, -0x1p-27L, -1.0L, -3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5008   TEST_c_c (catanh, 1.0L, 0x1p-27L, 9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5009   TEST_c_c (catanh, -1.0L, 0x1p-27L, -9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5010   TEST_c_c (catanh, 1.0L, -0x1p-27L, 9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5011   TEST_c_c (catanh, -1.0L, -0x1p-27L, -9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5012   TEST_c_c (catanh, 0x1p-33L, 1.0L, 5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5013   TEST_c_c (catanh, 0x1p-33L, -1.0L, 5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5014   TEST_c_c (catanh, -0x1p-33L, 1.0L, -5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5015   TEST_c_c (catanh, -0x1p-33L, -1.0L, -5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5016   TEST_c_c (catanh, 1.0L, 0x1p-33L, 1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5017   TEST_c_c (catanh, -1.0L, 0x1p-33L, -1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5018   TEST_c_c (catanh, 1.0L, -0x1p-33L, 1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5019   TEST_c_c (catanh, -1.0L, -0x1p-33L, -1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5020   TEST_c_c (catanh, 0x1p-54L, 1.0L, 2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5021   TEST_c_c (catanh, 0x1p-54L, -1.0L, 2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5022   TEST_c_c (catanh, -0x1p-54L, 1.0L, -2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5023   TEST_c_c (catanh, -0x1p-54L, -1.0L, -2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5024   TEST_c_c (catanh, 1.0L, 0x1p-54L, 1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5025   TEST_c_c (catanh, -1.0L, 0x1p-54L, -1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5026   TEST_c_c (catanh, 1.0L, -0x1p-54L, 1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5027   TEST_c_c (catanh, -1.0L, -0x1p-54L, -1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5028   TEST_c_c (catanh, 0x1p-57L, 1.0L, 3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5029   TEST_c_c (catanh, 0x1p-57L, -1.0L, 3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5030   TEST_c_c (catanh, -0x1p-57L, 1.0L, -3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5031   TEST_c_c (catanh, -0x1p-57L, -1.0L, -3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5032   TEST_c_c (catanh, 1.0L, 0x1p-57L, 2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5033   TEST_c_c (catanh, -1.0L, 0x1p-57L, -2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5034   TEST_c_c (catanh, 1.0L, -0x1p-57L, 2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5035   TEST_c_c (catanh, -1.0L, -0x1p-57L, -2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5036   TEST_c_c (catanh, 0x1p-13L, 0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5037   TEST_c_c (catanh, 0x1p-13L, -0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5038   TEST_c_c (catanh, -0x1p-13L, 0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5039   TEST_c_c (catanh, -0x1p-13L, -0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5040   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-13L, 4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5041   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-13L, -4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5042   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-13L, 4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5043   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-13L, -4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5044   TEST_c_c (catanh, 0x1p-13L, 0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5045   TEST_c_c (catanh, 0x1p-13L, -0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5046   TEST_c_c (catanh, -0x1p-13L, 0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5047   TEST_c_c (catanh, -0x1p-13L, -0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5048   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-13L, 4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5049   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-13L, -4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5050   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-13L, 4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5051   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-13L, -4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5052 #ifndef TEST_FLOAT
5053   TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5054   TEST_c_c (catanh, 0x1p-27L, -0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5055   TEST_c_c (catanh, -0x1p-27L, 0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5056   TEST_c_c (catanh, -0x1p-27L, -0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5057   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5058   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5059   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5060   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5061   TEST_c_c (catanh, 0x1p-27L, 0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5062   TEST_c_c (catanh, 0x1p-27L, -0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5063   TEST_c_c (catanh, -0x1p-27L, 0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5064   TEST_c_c (catanh, -0x1p-27L, -0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5065   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5066   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5067   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5068   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5069 #endif
5070 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5071   TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5072   TEST_c_c (catanh, 0x1p-33L, -0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5073   TEST_c_c (catanh, -0x1p-33L, 0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5074   TEST_c_c (catanh, -0x1p-33L, -0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5075   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5076   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5077   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5078   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5079   TEST_c_c (catanh, 0x1p-33L, 0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5080   TEST_c_c (catanh, 0x1p-33L, -0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5081   TEST_c_c (catanh, -0x1p-33L, 0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5082   TEST_c_c (catanh, -0x1p-33L, -0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5083   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5084   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5085   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5086   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5087 #endif
5088 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5089   TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5090   TEST_c_c (catanh, 0x1p-54L, -0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5091   TEST_c_c (catanh, -0x1p-54L, 0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5092   TEST_c_c (catanh, -0x1p-54L, -0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5093   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-54L, 1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5094   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-54L, -1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5095   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-54L, 1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5096   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-54L, -1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5097   TEST_c_c (catanh, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5098   TEST_c_c (catanh, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5099   TEST_c_c (catanh, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5100   TEST_c_c (catanh, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5101   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5102   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5103   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5104   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5105 #endif
5106 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5107   TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5108   TEST_c_c (catanh, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5109   TEST_c_c (catanh, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5110   TEST_c_c (catanh, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5111   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5112   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5113   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5114   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5115   TEST_c_c (catanh, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5116   TEST_c_c (catanh, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5117   TEST_c_c (catanh, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5118   TEST_c_c (catanh, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5119   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5120   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5121   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5122   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5123 #endif
5124   TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5125   TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5126   TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5127   TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5128   TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5129   TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5130   TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5131   TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5132   TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5133   TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5134   TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5135   TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5136   TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5137   TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5138   TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5139   TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5140   TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5141   TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5142   TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5143   TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5144   TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5145   TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5146   TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5147   TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5148   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5149   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5150   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5151   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5152   TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5153   TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5154   TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5155   TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5156   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5157   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5158   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5159   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5160   TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5161   TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5162   TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5163   TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5164 #ifndef TEST_FLOAT
5165   TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5166   TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5167   TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5168   TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5169   TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5170   TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5171   TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5172   TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5173   TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5174   TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5175   TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5176   TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5177   TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5178   TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5179   TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5180   TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5181   TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5182   TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5183   TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5184   TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5185   TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5186   TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5187   TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5188   TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5189   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5190   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5191   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5192   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5193   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5194   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5195   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5196   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5197   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5198   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5199   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5200   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5201   TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5202   TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5203   TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5204   TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5205 #endif
5206 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5207   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5208   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5209   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5210   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5211   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5212   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5213   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5214   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5215   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5216   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5217   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5218   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5219   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5220   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5221   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5222   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5223 #endif
5224 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5225   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5226   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5227   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5228   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5229   TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5230   TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5231   TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5232   TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5233   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5234   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5235   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5236   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5237   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5238   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5239   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5240   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5241 #endif
5242 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5243   TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5244   TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5245   TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5246   TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5247   TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5248   TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5249   TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5250   TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5251   TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5252   TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5253   TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5254   TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5255   TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5256   TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5257   TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5258   TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5259   TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5260   TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5261   TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5262   TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5263   TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5264   TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5265   TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5266   TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5267   TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5268   TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5269   TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5270   TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5271   TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5272   TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5273   TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5274   TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5275   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5276   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5277   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5278   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5279   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5280   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5281   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5282   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5283   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5284   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5285   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5286   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5287   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5288   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5289   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5290   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5291 # if LDBL_MANT_DIG >= 113
5292   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5293   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5294   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5295   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5296   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5297   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5298   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5299   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5300   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5301   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5302   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5303   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5304   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5305   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5306   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5307   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5308 # endif
5309 #endif
5311   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
5312   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
5314   END (catanh, complex);
5317 static void
5318 cbrt_test (void)
5320   errno = 0;
5321   FUNC(cbrt) (8);
5322   if (errno == ENOSYS)
5323     /* Function not implemented.  */
5324     return;
5326   START (cbrt);
5328   TEST_f_f (cbrt, 0.0, 0.0);
5329   TEST_f_f (cbrt, minus_zero, minus_zero);
5331   TEST_f_f (cbrt, plus_infty, plus_infty);
5332   TEST_f_f (cbrt, minus_infty, minus_infty);
5333   TEST_f_f (cbrt, qnan_value, qnan_value);
5335   TEST_f_f (cbrt, -0.001L, -0.1L);
5336   TEST_f_f (cbrt, 8, 2);
5337   TEST_f_f (cbrt, -27.0, -3.0);
5338   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
5339   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
5341   END (cbrt);
5345 static void
5346 ccos_test (void)
5348   errno = 0;
5349   FUNC(ccos) (BUILD_COMPLEX (0, 0));
5350   if (errno == ENOSYS)
5351     /* Function not implemented.  */
5352     return;
5354   START (ccos);
5356   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
5357   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
5358   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
5359   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
5361   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5362   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5363   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5364   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5366   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
5367   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
5368   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
5369   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
5371   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5372   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5373   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5374   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5376   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
5377   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
5378   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
5379   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
5381   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5382   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5383   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5384   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5386   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5387   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5389   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
5390   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
5392   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5393   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5395   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5396   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5398   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5399   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5401   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5402   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5404   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
5406   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
5407   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
5409   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5410   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5411   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5412   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5414 #ifndef TEST_FLOAT
5415   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5416   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5417   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5418   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5419 #endif
5421 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5422   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5423   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5424   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5425   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5426 #endif
5428 #ifdef TEST_FLOAT
5429   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5430 #endif
5432 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5433   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5434 #endif
5436 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5437   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5438 #endif
5440   TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5441   TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5443   END (ccos, complex);
5447 static void
5448 ccosh_test (void)
5450   errno = 0;
5451   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
5452   if (errno == ENOSYS)
5453     /* Function not implemented.  */
5454     return;
5456   START (ccosh);
5458   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
5459   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
5460   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
5461   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
5463   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5464   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5465   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5466   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5468   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
5469   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
5470   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
5471   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
5473   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5474   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5475   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5476   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5478   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
5479   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
5480   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
5481   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
5483   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5484   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5485   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5486   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5488   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5489   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5491   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
5492   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
5494   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5495   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5497   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5498   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5500   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5501   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5503   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5504   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5506   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
5508   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
5510   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
5512   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5513   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5514   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5515   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5517 #ifndef TEST_FLOAT
5518   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5519   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5520   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5521   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5522 #endif
5524 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5525   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5526   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5527   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5528   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5529 #endif
5531 #ifdef TEST_FLOAT
5532   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5533 #endif
5535 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5536   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5537 #endif
5539 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5540   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5541 #endif
5543   TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5544   TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5546   END (ccosh, complex);
5550 static void
5551 ceil_test (void)
5553   START (ceil);
5555   TEST_f_f (ceil, 0.0, 0.0);
5556   TEST_f_f (ceil, minus_zero, minus_zero);
5557   TEST_f_f (ceil, plus_infty, plus_infty);
5558   TEST_f_f (ceil, minus_infty, minus_infty);
5559   TEST_f_f (ceil, qnan_value, qnan_value);
5561   TEST_f_f (ceil, M_PIl, 4.0);
5562   TEST_f_f (ceil, -M_PIl, -3.0);
5563   TEST_f_f (ceil, 0.1, 1.0);
5564   TEST_f_f (ceil, 0.25, 1.0);
5565   TEST_f_f (ceil, 0.625, 1.0);
5566   TEST_f_f (ceil, -0.1, minus_zero);
5567   TEST_f_f (ceil, -0.25, minus_zero);
5568   TEST_f_f (ceil, -0.625, minus_zero);
5570 #ifdef TEST_LDOUBLE
5571   /* The result can only be represented in long double.  */
5572   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
5573   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
5574   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
5575   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
5576   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
5578   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
5579   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
5580   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
5581   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
5582   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
5584 # if LDBL_MANT_DIG > 100
5585   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
5586   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
5587   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
5588   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
5589   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
5590   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
5591 # endif
5593   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
5594   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
5595   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
5596   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
5597   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
5599   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
5600   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
5601   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
5602   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
5603   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
5605 # if LDBL_MANT_DIG > 100
5606   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
5607   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
5608   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
5609   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
5610   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
5611   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
5613   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
5614   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
5615   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
5616   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
5617   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
5618   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
5619 # endif
5621   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
5622   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
5623   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
5624   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
5625   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
5627   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
5628   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
5629   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
5630   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
5631   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
5633   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5634   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
5635   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
5636   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5637   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5638 #endif
5640   END (ceil);
5644 static void
5645 cexp_test (void)
5647   errno = 0;
5648   FUNC(cexp) (BUILD_COMPLEX (0, 0));
5649   if (errno == ENOSYS)
5650     /* Function not implemented.  */
5651     return;
5653   START (cexp);
5655   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
5656   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
5657   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
5658   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
5660   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
5661   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
5663   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
5664   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
5666   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5667   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5669   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5670   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5672   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5673   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5675   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5676   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5678   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
5679   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
5680   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
5681   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
5683   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5684   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5686   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
5687   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
5689   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
5691   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
5693   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5694   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5696   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5697   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5698   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5699   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
5701   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
5702   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
5704   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
5705   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
5706   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
5708 #ifndef TEST_FLOAT
5709   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
5710   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
5711   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
5712 #endif
5714 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5715   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
5716   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
5717 #endif
5719   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
5720   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
5722 #ifndef TEST_FLOAT
5723   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
5724   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
5725 #endif
5727 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5728   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
5729   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
5730 #endif
5732 #ifdef TEST_FLOAT
5733   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
5734 #endif
5736 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5737   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
5738 #endif
5740 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5741   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
5742 #endif
5744   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
5745   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
5746   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
5748   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5749   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5751   END (cexp, complex);
5755 static void
5756 cimag_test (void)
5758   START (cimag);
5759   TEST_c_f (cimag, 1.0, 0.0, 0.0);
5760   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
5761   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
5762   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
5763   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
5764   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
5765   TEST_c_f (cimag, 2.0, 3.0, 3.0);
5767   END (cimag);
5770 static void
5771 clog_test (void)
5773   errno = 0;
5774   FUNC(clog) (BUILD_COMPLEX (-2, -3));
5775   if (errno == ENOSYS)
5776     /* Function not implemented.  */
5777     return;
5779   START (clog);
5781   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5782   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5784   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5785   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5787   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
5788   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
5790   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
5791   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
5793   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
5794   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
5795   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
5796   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
5797   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
5798   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
5799   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
5800   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
5802   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
5803   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
5804   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
5805   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
5807   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
5808   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
5809   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
5810   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
5812   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
5813   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
5815   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
5816   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
5818   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5819   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5820   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5821   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5823   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5824   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5825   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5826   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5828   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
5830   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
5831   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
5833   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
5834   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5835   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
5836   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
5838 #ifndef TEST_FLOAT
5839   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
5840   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
5841   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
5842   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
5843 #endif
5845 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5846   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
5847   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
5848   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
5849 #endif
5851   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5852   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5853   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5854   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5855   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
5856   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
5857 #ifdef TEST_FLOAT
5858   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
5859   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
5860 #endif
5862 #ifndef TEST_FLOAT
5863   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
5864   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
5865   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
5866   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
5867   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
5868   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
5869 #endif
5870 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5871   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
5872   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
5873 #endif
5875 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5876   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5877   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5878   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5879   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5880   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
5881   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
5882   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5883   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5884 # if LDBL_MANT_DIG >= 113
5885   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5886   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5887   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5888   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5889   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
5890   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
5891   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5892   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5893 # endif
5894 #endif
5896   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
5897   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
5898   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
5899   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
5900   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
5901   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
5902   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
5903   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5904   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
5905 #ifndef TEST_FLOAT
5906   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5907   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5908   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5909 #endif
5910 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5911   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
5912   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5913   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5914 #endif
5916   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
5917   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
5918 #ifndef TEST_FLOAT
5919   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
5920   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
5921 #endif
5922 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5923   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
5924   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5925 #endif
5927   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
5928 #ifndef TEST_FLOAT
5929   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5930 #endif
5931 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5932   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
5933 #endif
5935   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
5936   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
5937   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
5938   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
5939   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
5940   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
5941   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
5942   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
5943   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
5944   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
5945 #ifndef TEST_FLOAT
5946   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
5947   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
5948   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
5949   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
5950   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
5951   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
5952   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
5953   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
5954   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
5955   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
5956   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
5957   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
5958 #endif
5959 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5960   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
5961   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
5962   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
5963   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
5964   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
5965 #endif
5966 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5967   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
5968   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
5969   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
5970   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
5971   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
5972   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
5973   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
5974   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
5975   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
5976   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
5977 #endif
5978 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5979   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
5980   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
5981   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
5982   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
5983   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
5984   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
5985 #endif
5987   END (clog, complex);
5991 static void
5992 clog10_test (void)
5994   errno = 0;
5995   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
5996   if (errno == ENOSYS)
5997     /* Function not implemented.  */
5998     return;
6000   START (clog10);
6002   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6003   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6005   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
6006   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
6008   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
6010   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
6011   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
6013   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
6014   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
6015   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
6016   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
6017   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
6018   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
6019   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
6020   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
6022   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
6023   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
6024   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
6025   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
6027   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
6028   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
6029   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
6030   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
6032   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
6033   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
6035   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
6036   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
6038   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6039   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6040   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6041   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6043   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6044   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6045   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6046   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6048   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
6050   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
6051   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
6053   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
6054   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6055   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
6056   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
6058 #ifndef TEST_FLOAT
6059   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
6060   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
6061   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
6062   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
6063 #endif
6065 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6066   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
6067   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
6068   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
6069 #endif
6071   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6072   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6073   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6074   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6075   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
6076   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
6077 #ifdef TEST_FLOAT
6078   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
6079   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
6080 #endif
6082 #ifndef TEST_FLOAT
6083   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6084   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6085   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6086   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6087   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
6088   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
6089 #endif
6090 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6091   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
6092   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
6093 #endif
6095 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6096   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6097   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6098   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6099   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6100   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6101   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6102   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6103   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6104 # if LDBL_MANT_DIG >= 113
6105   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6106   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6107   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6108   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6109   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6110   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6111   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6112   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6113 # endif
6114 #endif
6116   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
6117   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
6118   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
6119   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
6120   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
6121   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
6122   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
6123   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6124   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6125 #ifndef TEST_FLOAT
6126   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6127   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6128   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6129 #endif
6130 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6131   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
6132   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6133   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6134 #endif
6136   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
6137   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
6138 #ifndef TEST_FLOAT
6139   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
6140   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
6141 #endif
6142 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6143   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
6144   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6145 #endif
6147   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
6148 #ifndef TEST_FLOAT
6149   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6150 #endif
6151 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6152   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
6153 #endif
6155   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
6156   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
6157   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
6158   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
6159   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
6160   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
6161   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
6162   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
6163   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
6164   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
6165 #ifndef TEST_FLOAT
6166   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
6167   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
6168   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
6169   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
6170   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
6171   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
6172   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
6173   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
6174   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
6175   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
6176   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
6177   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
6178 #endif
6179 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6180   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
6181   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
6182   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
6183   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
6184   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
6185 #endif
6186 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6187   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
6188   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
6189   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
6190   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
6191   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
6192   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
6193   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
6194   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
6195   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
6196   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
6197 #endif
6198 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6199   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
6200   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
6201   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
6202   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
6203   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
6204   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
6205 #endif
6207   END (clog10, complex);
6211 static void
6212 conj_test (void)
6214   START (conj);
6215   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
6216   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
6217   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
6218   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
6219   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
6220   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
6221   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
6223   END (conj, complex);
6227 static void
6228 copysign_test (void)
6230   START (copysign);
6232   TEST_ff_f (copysign, 0, 4, 0);
6233   TEST_ff_f (copysign, 0, -4, minus_zero);
6234   TEST_ff_f (copysign, minus_zero, 4, 0);
6235   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
6237   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
6238   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
6239   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
6240   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
6242   TEST_ff_f (copysign, 0, plus_infty, 0);
6243   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
6244   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
6245   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
6247   /* XXX More correctly we would have to check the sign of the NaN.  */
6248   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
6249   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
6250   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
6251   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
6253   END (copysign);
6257 static void
6258 cos_test (void)
6260   errno = 0;
6261   FUNC(cos) (0);
6262   if (errno == ENOSYS)
6263     /* Function not implemented.  */
6264     return;
6266   START (cos);
6268   TEST_f_f (cos, 0, 1);
6269   TEST_f_f (cos, minus_zero, 1);
6270   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6271   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6272   TEST_f_f (cos, qnan_value, qnan_value, ERRNO_UNCHANGED);
6274   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
6275   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
6277   /* The value of M_PI_2l is never exactly PI/2, and therefore the
6278      answer is never exactly zero. The answer is equal to the error
6279      in rounding PI/2 for the type used.  Thus the answer is unique
6280      to each type.  */
6281 #ifdef TEST_FLOAT
6282   /* 32-bit float.  */
6283   TEST_f_f (cos, M_PI_2l, -0x1.777a5cp-25L);
6284 #endif
6285 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
6286   /* 64-bit double or 64-bit long double.  */
6287   TEST_f_f (cos, M_PI_2l, 0x1.1a62633145c07p-54L);
6288 #endif
6289 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
6290   /* 96-bit long double.  */
6291   TEST_f_f (cos, M_PI_2l, -0xe.ce675d1fc8f8cbbp-69L);
6292 #endif
6293 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
6294   /* 128-bit IBM long double.  */
6295   TEST_f_f (cos, M_PI_2l, 0x1.c1cd129024e088a67cc74020bcp-107L);
6296 #endif
6297 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
6298   /* 128-bit long double.  */
6299   TEST_f_f (cos, M_PI_2l, 0x1.cd129024e088a67cc74020bbea64p-115L);
6300 #endif
6302   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
6304   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
6305   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
6307 #ifdef TEST_DOUBLE
6308   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
6309 #endif
6311   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
6313 #ifndef TEST_FLOAT
6314   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
6315   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
6316 #endif
6318 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6319   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
6320 #endif
6322   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
6323   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
6324   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
6325   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
6326   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
6327   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
6329   END (cos);
6333 static void
6334 cos_test_tonearest (void)
6336   int save_round_mode;
6337   errno = 0;
6338   FUNC(cos) (0);
6339   if (errno == ENOSYS)
6340     /* Function not implemented.  */
6341     return;
6343   START (cos_tonearest);
6345   save_round_mode = fegetround ();
6347   if (!fesetround (FE_TONEAREST))
6348     {
6349       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6350       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6351       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6352       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6353       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6354       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6355       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6356       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6357       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6358       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6359     }
6361   fesetround (save_round_mode);
6363   END (cos_tonearest);
6367 static void
6368 cos_test_towardzero (void)
6370   int save_round_mode;
6371   errno = 0;
6372   FUNC(cos) (0);
6373   if (errno == ENOSYS)
6374     /* Function not implemented.  */
6375     return;
6377   START (cos_towardzero);
6379   save_round_mode = fegetround ();
6381   if (!fesetround (FE_TOWARDZERO))
6382     {
6383       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6384       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6385       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6386       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6387       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6388       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6389       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6390       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6391       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6392       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6393     }
6395   fesetround (save_round_mode);
6397   END (cos_towardzero);
6401 static void
6402 cos_test_downward (void)
6404   int save_round_mode;
6405   errno = 0;
6406   FUNC(cos) (0);
6407   if (errno == ENOSYS)
6408     /* Function not implemented.  */
6409     return;
6411   START (cos_downward);
6413   save_round_mode = fegetround ();
6415   if (!fesetround (FE_DOWNWARD))
6416     {
6417       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6418       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6419       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6420       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6421       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6422       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6423       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6424       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6425       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6426       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6427     }
6429   fesetround (save_round_mode);
6431   END (cos_downward);
6435 static void
6436 cos_test_upward (void)
6438   int save_round_mode;
6439   errno = 0;
6440   FUNC(cos) (0);
6441   if (errno == ENOSYS)
6442     /* Function not implemented.  */
6443     return;
6445   START (cos_upward);
6447   save_round_mode = fegetround ();
6449   if (!fesetround (FE_UPWARD))
6450     {
6451       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6452       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6453       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6454       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6455       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6456       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6457       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6458       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6459       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6460       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6461     }
6463   fesetround (save_round_mode);
6465   END (cos_upward);
6469 static void
6470 cosh_test (void)
6472   errno = 0;
6473   FUNC(cosh) (0.7L);
6474   if (errno == ENOSYS)
6475     /* Function not implemented.  */
6476     return;
6478   START (cosh);
6479   TEST_f_f (cosh, 0, 1);
6480   TEST_f_f (cosh, minus_zero, 1);
6482 #ifndef TEST_INLINE
6483   TEST_f_f (cosh, plus_infty, plus_infty);
6484   TEST_f_f (cosh, minus_infty, plus_infty);
6485 #endif
6486   TEST_f_f (cosh, qnan_value, qnan_value);
6488   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
6490 #ifndef TEST_FLOAT
6491   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6492   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6493 #endif
6495   END (cosh);
6499 static void
6500 cosh_test_tonearest (void)
6502   int save_round_mode;
6503   errno = 0;
6504   FUNC(cosh) (0);
6505   if (errno == ENOSYS)
6506     /* Function not implemented.  */
6507     return;
6509   START (cosh_tonearest);
6511   save_round_mode = fegetround ();
6513   if (!fesetround (FE_TONEAREST))
6514     {
6515       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6516       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6517       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6518     }
6520   fesetround (save_round_mode);
6522   END (cosh_tonearest);
6526 static void
6527 cosh_test_towardzero (void)
6529   int save_round_mode;
6530   errno = 0;
6531   FUNC(cosh) (0);
6532   if (errno == ENOSYS)
6533     /* Function not implemented.  */
6534     return;
6536   START (cosh_towardzero);
6538   save_round_mode = fegetround ();
6540   if (!fesetround (FE_TOWARDZERO))
6541     {
6542       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6543       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6544       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6545     }
6547   fesetround (save_round_mode);
6549   END (cosh_towardzero);
6553 static void
6554 cosh_test_downward (void)
6556   int save_round_mode;
6557   errno = 0;
6558   FUNC(cosh) (0);
6559   if (errno == ENOSYS)
6560     /* Function not implemented.  */
6561     return;
6563   START (cosh_downward);
6565   save_round_mode = fegetround ();
6567   if (!fesetround (FE_DOWNWARD))
6568     {
6569       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6570       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6571       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6572     }
6574   fesetround (save_round_mode);
6576   END (cosh_downward);
6580 static void
6581 cosh_test_upward (void)
6583   int save_round_mode;
6584   errno = 0;
6585   FUNC(cosh) (0);
6586   if (errno == ENOSYS)
6587     /* Function not implemented.  */
6588     return;
6590   START (cosh_upward);
6592   save_round_mode = fegetround ();
6594   if (!fesetround (FE_UPWARD))
6595     {
6596       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6597       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6598       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6599     }
6601   fesetround (save_round_mode);
6603   END (cosh_upward);
6607 static void
6608 cpow_test (void)
6610   errno = 0;
6611   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
6612   if (errno == ENOSYS)
6613     /* Function not implemented.  */
6614     return;
6616   START (cpow);
6618   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
6619   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
6621   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
6622   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
6624   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
6626   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
6627   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
6628   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
6629   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
6631   END (cpow, complex);
6635 static void
6636 cproj_test (void)
6638   START (cproj);
6639   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
6640   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
6641   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
6642   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
6644   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
6646   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
6647   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
6648   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
6649   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
6651   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
6652   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
6654   END (cproj, complex);
6658 static void
6659 creal_test (void)
6661   START (creal);
6662   TEST_c_f (creal, 0.0, 1.0, 0.0);
6663   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
6664   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
6665   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
6666   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
6667   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
6668   TEST_c_f (creal, 2.0, 3.0, 2.0);
6670   END (creal);
6673 static void
6674 csin_test (void)
6676   errno = 0;
6677   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
6678   if (errno == ENOSYS)
6679     /* Function not implemented.  */
6680     return;
6682   START (csin);
6684   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
6685   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
6686   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
6687   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
6689   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
6690   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
6691   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
6692   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
6694   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6695   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6696   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6697   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6699   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6700   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6701   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6702   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6704   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6705   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6706   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6707   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
6709   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
6710   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
6711   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
6712   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
6714   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6715   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6717   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6718   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6720   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6721   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6723   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
6724   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
6726   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6727   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6729   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6730   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6732   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
6734   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
6735   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
6737   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6738   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6739   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6740   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6742 #ifndef TEST_FLOAT
6743   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6744   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6745   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6746   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6747 #endif
6749 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6750   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6751   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6752   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6753   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6754 #endif
6756 #ifdef TEST_FLOAT
6757   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
6758 #endif
6760 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6761   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
6762 #endif
6764 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6765   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
6766 #endif
6768   TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6769   TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6771   END (csin, complex);
6775 static void
6776 csinh_test (void)
6778   errno = 0;
6779   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
6780   if (errno == ENOSYS)
6781     /* Function not implemented.  */
6782     return;
6784   START (csinh);
6786   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
6787   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
6788   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
6789   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
6791   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6792   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6793   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6794   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6796   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
6797   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
6798   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
6799   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
6801   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6802   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6803   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6804   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6806   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
6807   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
6808   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
6809   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
6811   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6812   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6813   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6814   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6816   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6817   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6819   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6820   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6822   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6823   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6825   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
6826   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
6828   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6829   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6831   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6832   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6834   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
6836   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
6837   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
6839   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6840   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6841   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6842   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6844 #ifndef TEST_FLOAT
6845   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6846   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6847   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6848   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6849 #endif
6851 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6852   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6853   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6854   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6855   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6856 #endif
6858 #ifdef TEST_FLOAT
6859   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
6860 #endif
6862 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6863   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
6864 #endif
6866 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6867   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
6868 #endif
6870   TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6871   TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6873   END (csinh, complex);
6877 static void
6878 csqrt_test (void)
6880   errno = 0;
6881   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
6882   if (errno == ENOSYS)
6883     /* Function not implemented.  */
6884     return;
6886   START (csqrt);
6888   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
6889   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
6890   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
6891   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
6893   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
6894   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
6895   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
6896   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
6898   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
6899   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
6900   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
6901   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
6903   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
6904   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
6905   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
6906   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
6907   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
6908   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
6909   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
6910   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
6911   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
6912   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
6913   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
6914   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
6916   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6918   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
6920   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6921   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6922   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6923   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6925   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6926   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6927   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6928   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6930   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
6932   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
6933   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
6934   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
6935   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
6936   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
6937   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
6938   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
6939   /* Principal square root should be returned (i.e., non-negative real
6940      part).  */
6941   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
6943   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
6944   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
6945   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
6946   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
6948   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
6949   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
6950 #ifdef TEST_FLOAT
6951   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
6952 #endif
6953   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
6954   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
6955   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
6957 #ifndef TEST_FLOAT
6958   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
6959   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
6960   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
6961   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
6963   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
6964   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
6965 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6966   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
6967 #endif
6968   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
6969   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
6970   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
6971 #endif
6973 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6974   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
6975   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
6976   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
6978   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
6979   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
6980   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6981   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6982   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
6983   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
6985 # if LDBL_MANT_DIG >= 113
6986   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
6987   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
6988   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6989   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6990   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
6991   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
6992 # endif
6993 #endif
6995   END (csqrt, complex);
6998 static void
6999 ctan_test (void)
7001   errno = 0;
7002   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7003   if (errno == ENOSYS)
7004     /* Function not implemented.  */
7005     return;
7007   START (ctan);
7009   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
7010   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
7011   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
7012   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
7014   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
7015   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
7016   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
7017   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
7019   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
7020   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
7021   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
7022   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
7024   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7025   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7026   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7027   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7028   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7029   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7030   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7031   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7033   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
7034   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
7036   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
7037   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
7039   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7040   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7042   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7043   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7044   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7045   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7047   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
7049   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
7050   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
7052   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
7053   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
7055 #ifndef TEST_FLOAT
7056   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7057   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7058 #endif
7060 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7061   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
7062   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
7063 #endif
7065   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
7067   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
7069 #ifndef TEST_FLOAT
7070   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
7071 #endif
7073 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7074   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
7075 #endif
7077   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
7078   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
7079   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
7080   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
7082   END (ctan, complex);
7086 static void
7087 ctan_test_tonearest (void)
7089   int save_round_mode;
7090   errno = 0;
7091   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7092   if (errno == ENOSYS)
7093     /* Function not implemented.  */
7094     return;
7096   START (ctan_tonearest);
7098   save_round_mode = fegetround ();
7100   if (!fesetround (FE_TONEAREST))
7101     {
7102       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7104 #ifndef TEST_FLOAT
7105       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7106 #endif
7108 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7109       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7110 #endif
7111     }
7113   fesetround (save_round_mode);
7115   END (ctan_tonearest, complex);
7119 static void
7120 ctan_test_towardzero (void)
7122   int save_round_mode;
7123   errno = 0;
7124   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7125   if (errno == ENOSYS)
7126     /* Function not implemented.  */
7127     return;
7129   START (ctan_towardzero);
7131   save_round_mode = fegetround ();
7133   if (!fesetround (FE_TOWARDZERO))
7134     {
7135       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7137 #ifndef TEST_FLOAT
7138       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7139 #endif
7141 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7142       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7143 #endif
7144     }
7146   fesetround (save_round_mode);
7148   END (ctan_towardzero, complex);
7152 static void
7153 ctan_test_downward (void)
7155   int save_round_mode;
7156   errno = 0;
7157   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7158   if (errno == ENOSYS)
7159     /* Function not implemented.  */
7160     return;
7162   START (ctan_downward);
7164   save_round_mode = fegetround ();
7166   if (!fesetround (FE_DOWNWARD))
7167     {
7168       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7170 #ifndef TEST_FLOAT
7171       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7172 #endif
7174 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7175       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7176 #endif
7177     }
7179   fesetround (save_round_mode);
7181   END (ctan_downward, complex);
7185 static void
7186 ctan_test_upward (void)
7188   int save_round_mode;
7189   errno = 0;
7190   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7191   if (errno == ENOSYS)
7192     /* Function not implemented.  */
7193     return;
7195   START (ctan_upward);
7197   save_round_mode = fegetround ();
7199   if (!fesetround (FE_UPWARD))
7200     {
7201       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7203 #ifndef TEST_FLOAT
7204       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7205 #endif
7207 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7208       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7209 #endif
7210     }
7212   fesetround (save_round_mode);
7214   END (ctan_upward, complex);
7218 static void
7219 ctanh_test (void)
7221   errno = 0;
7222   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
7223   if (errno == ENOSYS)
7224     /* Function not implemented.  */
7225     return;
7227   START (ctanh);
7229   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
7230   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
7231   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
7232   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
7234   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
7235   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
7236   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
7237   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
7238   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
7239   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
7240   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
7241   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
7243   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7244   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7245   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7246   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7247   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7248   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7249   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7250   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7252   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7253   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7255   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
7256   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
7258   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7259   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7261   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7262   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7263   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7264   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7266   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
7268   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
7270   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
7271   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
7273   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
7274   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
7276 #ifndef TEST_FLOAT
7277   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
7278   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
7279 #endif
7281 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7282   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
7283   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
7284 #endif
7286   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
7288   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
7290 #ifndef TEST_FLOAT
7291   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
7292 #endif
7294 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7295   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
7296 #endif
7298   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
7299   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
7300   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
7301   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
7303   END (ctanh, complex);
7307 static void
7308 ctanh_test_tonearest (void)
7310   int save_round_mode;
7311   errno = 0;
7312   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7313   if (errno == ENOSYS)
7314     /* Function not implemented.  */
7315     return;
7317   START (ctanh_tonearest);
7319   save_round_mode = fegetround ();
7321   if (!fesetround (FE_TONEAREST))
7322     {
7323       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7325 #ifndef TEST_FLOAT
7326       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7327 #endif
7329 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7330       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7331 #endif
7332     }
7334   fesetround (save_round_mode);
7336   END (ctanh_tonearest, complex);
7340 static void
7341 ctanh_test_towardzero (void)
7343   int save_round_mode;
7344   errno = 0;
7345   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7346   if (errno == ENOSYS)
7347     /* Function not implemented.  */
7348     return;
7350   START (ctanh_towardzero);
7352   save_round_mode = fegetround ();
7354   if (!fesetround (FE_TOWARDZERO))
7355     {
7356       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7358 #ifndef TEST_FLOAT
7359       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7360 #endif
7362 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7363       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7364 #endif
7365     }
7367   fesetround (save_round_mode);
7369   END (ctanh_towardzero, complex);
7373 static void
7374 ctanh_test_downward (void)
7376   int save_round_mode;
7377   errno = 0;
7378   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7379   if (errno == ENOSYS)
7380     /* Function not implemented.  */
7381     return;
7383   START (ctanh_downward);
7385   save_round_mode = fegetround ();
7387   if (!fesetround (FE_DOWNWARD))
7388     {
7389       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7391 #ifndef TEST_FLOAT
7392       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7393 #endif
7395 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7396       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7397 #endif
7398     }
7400   fesetround (save_round_mode);
7402   END (ctanh_downward, complex);
7406 static void
7407 ctanh_test_upward (void)
7409   int save_round_mode;
7410   errno = 0;
7411   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7412   if (errno == ENOSYS)
7413     /* Function not implemented.  */
7414     return;
7416   START (ctanh_upward);
7418   save_round_mode = fegetround ();
7420   if (!fesetround (FE_UPWARD))
7421     {
7422       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7424 #ifndef TEST_FLOAT
7425       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7426 #endif
7428 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7429       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7430 #endif
7431     }
7433   fesetround (save_round_mode);
7435   END (ctanh_upward, complex);
7439 static void
7440 erf_test (void)
7442   errno = 0;
7443   FUNC(erf) (0);
7444   if (errno == ENOSYS)
7445     /* Function not implemented.  */
7446     return;
7448   START (erf);
7450   TEST_f_f (erf, 0, 0);
7451   TEST_f_f (erf, minus_zero, minus_zero);
7452   TEST_f_f (erf, plus_infty, 1);
7453   TEST_f_f (erf, minus_infty, -1);
7454   TEST_f_f (erf, qnan_value, qnan_value);
7456   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
7457   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
7458   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
7459   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
7460   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
7461   TEST_f_f (erf, 27.0L, 1.0L);
7463   END (erf);
7467 static void
7468 erfc_test (void)
7470   errno = 0;
7471   FUNC(erfc) (0);
7472   if (errno == ENOSYS)
7473     /* Function not implemented.  */
7474     return;
7476   START (erfc);
7478   TEST_f_f (erfc, plus_infty, 0.0);
7479   TEST_f_f (erfc, minus_infty, 2.0);
7480   TEST_f_f (erfc, 0.0, 1.0);
7481   TEST_f_f (erfc, minus_zero, 1.0);
7482   TEST_f_f (erfc, qnan_value, qnan_value);
7484   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
7485   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
7486   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
7487   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7488   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
7489   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7490   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
7491   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
7492 #ifdef TEST_LDOUBLE
7493   /* The result can only be represented in long double.  */
7494 # if LDBL_MIN_10_EXP < -319
7495   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
7496 # endif
7497 # if LDBL_MANT_DIG >= 106
7498   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
7499 # endif
7500 #endif
7502   END (erfc);
7506 static void
7507 exp_test (void)
7509   errno = 0;
7510   FUNC(exp) (0);
7511   if (errno == ENOSYS)
7512     /* Function not implemented.  */
7513     return;
7515   START (exp);
7517   TEST_f_f (exp, 0, 1);
7518   TEST_f_f (exp, minus_zero, 1);
7520 #ifndef TEST_INLINE
7521   TEST_f_f (exp, plus_infty, plus_infty);
7522   TEST_f_f (exp, minus_infty, 0);
7523 #endif
7524   TEST_f_f (exp, qnan_value, qnan_value);
7525   TEST_f_f (exp, 1, M_El);
7527   TEST_f_f (exp, 2, M_E2l);
7528   TEST_f_f (exp, 3, M_E3l);
7529   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
7530   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
7531   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
7532 #ifndef TEST_FLOAT
7533   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
7534 #endif
7535 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
7536   /* The result can only be represented in sane long double.  */
7537   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
7538 #endif
7540 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
7541   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
7542   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
7543 #endif
7544   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
7545   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
7546   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
7548   END (exp);
7552 static void
7553 exp_test_tonearest (void)
7555   int save_round_mode;
7556   errno = 0;
7557   FUNC(exp) (0);
7558   if (errno == ENOSYS)
7559     /* Function not implemented.  */
7560     return;
7562   START (exp_tonearest);
7564   save_round_mode = fegetround ();
7566   if (!fesetround (FE_TONEAREST))
7567     {
7568       TEST_f_f (exp, 1, M_El);
7569       TEST_f_f (exp, 2, M_E2l);
7570       TEST_f_f (exp, 3, M_E3l);
7571     }
7573   fesetround (save_round_mode);
7575   END (exp_tonearest);
7579 static void
7580 exp_test_towardzero (void)
7582   int save_round_mode;
7583   errno = 0;
7584   FUNC(exp) (0);
7585   if (errno == ENOSYS)
7586     /* Function not implemented.  */
7587     return;
7589   START (exp_towardzero);
7591   save_round_mode = fegetround ();
7593   if (!fesetround (FE_TOWARDZERO))
7594     {
7595       TEST_f_f (exp, 1, M_El);
7596       TEST_f_f (exp, 2, M_E2l);
7597       TEST_f_f (exp, 3, M_E3l);
7598     }
7600   fesetround (save_round_mode);
7602   END (exp_towardzero);
7606 static void
7607 exp_test_downward (void)
7609   int save_round_mode;
7610   errno = 0;
7611   FUNC(exp) (0);
7612   if (errno == ENOSYS)
7613     /* Function not implemented.  */
7614     return;
7616   START (exp_downward);
7618   save_round_mode = fegetround ();
7620   if (!fesetround (FE_DOWNWARD))
7621     {
7622       TEST_f_f (exp, 1, M_El);
7623       TEST_f_f (exp, 2, M_E2l);
7624       TEST_f_f (exp, 3, M_E3l);
7625     }
7627   fesetround (save_round_mode);
7629   END (exp_downward);
7633 static void
7634 exp_test_upward (void)
7636   int save_round_mode;
7637   errno = 0;
7638   FUNC(exp) (0);
7639   if (errno == ENOSYS)
7640     /* Function not implemented.  */
7641     return;
7643   START (exp_upward);
7645   save_round_mode = fegetround ();
7647   if (!fesetround (FE_UPWARD))
7648     {
7649       TEST_f_f (exp, 1, M_El);
7650       TEST_f_f (exp, 2, M_E2l);
7651       TEST_f_f (exp, 3, M_E3l);
7652     }
7654   fesetround (save_round_mode);
7656   END (exp_upward);
7660 static void
7661 exp10_test (void)
7663   errno = 0;
7664   FUNC(exp10) (0);
7665   if (errno == ENOSYS)
7666     /* Function not implemented.  */
7667     return;
7669   START (exp10);
7671   TEST_f_f (exp10, 0, 1);
7672   TEST_f_f (exp10, minus_zero, 1);
7674   TEST_f_f (exp10, plus_infty, plus_infty);
7675   TEST_f_f (exp10, minus_infty, 0);
7676   TEST_f_f (exp10, qnan_value, qnan_value);
7677   TEST_f_f (exp10, 3, 1000);
7678   TEST_f_f (exp10, -1, 0.1L);
7679   TEST_f_f (exp10, 36, 1.0e36L);
7680   TEST_f_f (exp10, -36, 1.0e-36L);
7681 #ifndef TEST_FLOAT
7682   TEST_f_f (exp10, 305, 1.0e305L);
7683   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
7684 #endif
7685 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
7686   TEST_f_f (exp10, 4932, 1.0e4932L);
7687   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
7688 #endif
7689   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7690   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
7691   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
7692   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
7693   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
7695   END (exp10);
7699 static void
7700 exp2_test (void)
7702   errno = 0;
7703   FUNC(exp2) (0);
7704   if (errno == ENOSYS)
7705     /* Function not implemented.  */
7706     return;
7708   START (exp2);
7710   TEST_f_f (exp2, 0, 1);
7711   TEST_f_f (exp2, minus_zero, 1);
7712   TEST_f_f (exp2, plus_infty, plus_infty);
7713   TEST_f_f (exp2, minus_infty, 0);
7714   TEST_f_f (exp2, qnan_value, qnan_value);
7716   TEST_f_f (exp2, 10, 1024);
7717   TEST_f_f (exp2, -1, 0.5);
7718   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7719   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
7720   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
7721   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
7722   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
7724   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
7725   TEST_f_f (exp2, 127, 0x1p127);
7726   TEST_f_f (exp2, -149, 0x1p-149);
7728 #ifndef TEST_FLOAT
7729   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
7730   TEST_f_f (exp2, 1023, 0x1p1023);
7731   TEST_f_f (exp2, -1074, 0x1p-1074);
7732 #endif
7734 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7735   TEST_f_f (exp2, 16383, 0x1p16383L);
7736   TEST_f_f (exp2, -16400, 0x1p-16400L);
7737 #endif
7739   END (exp2);
7743 static void
7744 expm1_test (void)
7746   errno = 0;
7747   FUNC(expm1) (0);
7748   if (errno == ENOSYS)
7749     /* Function not implemented.  */
7750     return;
7752   START (expm1);
7754   TEST_f_f (expm1, 0, 0);
7755   TEST_f_f (expm1, minus_zero, minus_zero);
7757 #ifndef TEST_INLINE
7758   TEST_f_f (expm1, plus_infty, plus_infty);
7759   TEST_f_f (expm1, minus_infty, -1);
7760 #endif
7761   TEST_f_f (expm1, qnan_value, qnan_value);
7763   TEST_f_f (expm1, 1, M_El - 1.0);
7764   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
7766   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
7768 #ifndef TEST_FLOAT
7769   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
7770   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
7771 #endif
7773 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7774   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
7775 #endif
7777   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
7778   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
7779   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
7780   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
7781   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
7782   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
7783   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
7784   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
7785   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
7786   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
7787   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
7788   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
7789   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
7790   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
7791   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
7792   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
7793   TEST_f_f (expm1, -100.0, -1.0);
7794   TEST_f_f (expm1, -1000.0, -1.0);
7795   TEST_f_f (expm1, -10000.0, -1.0);
7796   TEST_f_f (expm1, -100000.0, -1.0);
7798   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
7799   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
7800   TEST_f_f (expm1, -max_value, -1);
7802   END (expm1);
7806 static void
7807 fabs_test (void)
7809   START (fabs);
7811   TEST_f_f (fabs, 0, 0);
7812   TEST_f_f (fabs, minus_zero, 0);
7814   TEST_f_f (fabs, plus_infty, plus_infty);
7815   TEST_f_f (fabs, minus_infty, plus_infty);
7816   TEST_f_f (fabs, qnan_value, qnan_value);
7818   TEST_f_f (fabs, 38.0, 38.0);
7819   TEST_f_f (fabs, -M_El, M_El);
7821   END (fabs);
7825 static void
7826 fdim_test (void)
7828   START (fdim);
7830   TEST_ff_f (fdim, 0, 0, 0);
7831   TEST_ff_f (fdim, 9, 0, 9);
7832   TEST_ff_f (fdim, 0, 9, 0);
7833   TEST_ff_f (fdim, -9, 0, 0);
7834   TEST_ff_f (fdim, 0, -9, 9);
7836   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
7837   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
7838   TEST_ff_f (fdim, minus_infty, 9, 0);
7839   TEST_ff_f (fdim, minus_infty, -9, 0);
7840   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
7841   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
7842   TEST_ff_f (fdim, 9, plus_infty, 0);
7843   TEST_ff_f (fdim, -9, plus_infty, 0);
7845   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
7846   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
7847   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
7848   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
7849   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
7850   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
7851   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
7852   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
7853   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
7854   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
7856   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
7858   END (fdim);
7862 static void
7863 finite_test (void)
7865   START (finite);
7867   TEST_f_b (finite, 0, 1);
7868   TEST_f_b (finite, minus_zero, 1);
7869   TEST_f_b (finite, 10, 1);
7870   TEST_f_b (finite, min_subnorm_value, 1);
7871   TEST_f_b (finite, plus_infty, 0);
7872   TEST_f_b (finite, minus_infty, 0);
7873   TEST_f_b (finite, qnan_value, 0);
7875   END (finite);
7879 static void
7880 floor_test (void)
7882   START (floor);
7884   TEST_f_f (floor, 0.0, 0.0);
7885   TEST_f_f (floor, minus_zero, minus_zero);
7886   TEST_f_f (floor, plus_infty, plus_infty);
7887   TEST_f_f (floor, minus_infty, minus_infty);
7888   TEST_f_f (floor, qnan_value, qnan_value);
7890   TEST_f_f (floor, M_PIl, 3.0);
7891   TEST_f_f (floor, -M_PIl, -4.0);
7893   TEST_f_f (floor, 0.1, 0.0);
7894   TEST_f_f (floor, 0.25, 0.0);
7895   TEST_f_f (floor, 0.625, 0.0);
7896   TEST_f_f (floor, -0.1, -1.0);
7897   TEST_f_f (floor, -0.25, -1.0);
7898   TEST_f_f (floor, -0.625, -1.0);
7900 #ifdef TEST_LDOUBLE
7901   /* The result can only be represented in long double.  */
7902   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
7903   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
7904   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
7905   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
7906   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
7907 # if LDBL_MANT_DIG > 100
7908   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
7909   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
7910   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
7911 # endif
7913   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
7914   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
7915   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
7916   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
7917   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
7918 # if LDBL_MANT_DIG > 100
7919   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
7920   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
7921   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
7922 # endif
7924   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
7925   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
7926   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
7927   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
7928   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
7930 # if LDBL_MANT_DIG > 100
7931   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
7932   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
7933   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
7934   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
7935   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
7936   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
7937 # endif
7939   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
7940   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
7941   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
7942   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
7943   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
7945 # if LDBL_MANT_DIG > 100
7946   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
7947   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
7948   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
7949   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
7950   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
7951   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
7952 # endif
7954   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
7955   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
7956   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
7957   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
7958   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
7960   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
7961   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
7962   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
7963   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
7964   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
7966   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7967   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7968   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7969   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7970   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7972   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
7973   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
7974 #endif
7976   END (floor);
7980 static void
7981 fma_test (void)
7983   START (fma);
7985   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
7986   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
7987   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
7988   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7989   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7990   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7991   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7992   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7993   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7994   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7995   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7996   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7998   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
7999   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8000   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8001   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8002   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8003   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8004   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8005   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
8007   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
8009   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
8010                          LDBL_MAX, DBL_MAX, FLT_MAX);
8011   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
8012   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
8013   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
8014   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
8015   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
8016   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
8017   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
8018   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
8020   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8021   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8022   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8023   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8024   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8025   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8026   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8027   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8028   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8029   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8030   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8031   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8032   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8033   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8034   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8035   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8036   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8037   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8038   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8039   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8040   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8041   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8042   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8043   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8045   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8046   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8047   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8048   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8050   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8051   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8052   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8053   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8054   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8055   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8056   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8057   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8059   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8060   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8061   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8062   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8063   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8064   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8065   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8066   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8068 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8069   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
8070   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
8071   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
8072   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
8073   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
8074   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
8075   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
8076   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8077   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8078   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8079   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8080   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8081   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8082   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8083   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8084   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8085   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8086   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8087   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8088   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8089   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8090   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8091   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8092   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8093   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8094   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8095   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8096   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8097   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8098   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8099   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8100   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8101   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8102   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8103   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8104   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8105   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8106   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8107   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8108   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8109   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8110   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8111   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8112 #endif
8113 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8114   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
8115   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
8116   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
8117   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
8118   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
8119   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
8120   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
8121   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
8122   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
8123   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
8124   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
8125   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
8126   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
8127   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
8128   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
8129   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
8130   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
8131   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
8132   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
8133   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
8134   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8135   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8136   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8137   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8138   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8139   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8140   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8141   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8142   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8143   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8144   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8145   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8146   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8147   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8148   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8149   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8150   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8151   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8152   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8153   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8154   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8155   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8156   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8157   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8158   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8159   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8160   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8161   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8162   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8163   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8164   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8165   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8166   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8167   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8168   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8169   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8170 #endif
8171 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8172   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
8173   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
8174   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
8175   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
8176   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
8177   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
8178   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8179   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8180   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8181   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8182   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8183   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8184   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8185   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8186   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8187   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8188   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8189   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8190   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8191   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8192   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8193   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8194   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8195   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8196   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8197   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8198   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8199   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8200   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8201   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8202   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8203   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8204   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8205   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8206   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8207   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8208   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8209   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8210   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8211   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8212   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8213   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8214 #endif
8215 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8216   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
8217   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
8218   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
8219   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
8220   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
8221   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
8222   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
8223   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
8224   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
8225   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
8226   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
8227   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
8228   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
8229   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8230   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8231   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8232   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8233   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8234   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8235   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8236   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8237   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8238   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8239   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8240   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8241   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8242   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8243   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8244   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8245   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8246   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8247   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8248   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8249   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8250   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8251   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8252   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8253   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8254   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8255   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8256   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8257   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8258   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8259   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8260   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8261   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8262   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8263   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8264   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8265 #endif
8267   END (fma);
8271 static void
8272 fma_test_towardzero (void)
8274   int save_round_mode;
8275   START (fma_towardzero);
8277   save_round_mode = fegetround ();
8279   if (!fesetround (FE_TOWARDZERO))
8280     {
8281       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8282       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8283       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8284       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8285       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8286       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8287       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8288       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8289       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8290       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8291       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8292       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8293       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8294       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8295       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8296       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8297       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8298       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8299       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8300       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8301       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8302       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8303       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8304       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8306       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8307       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8308       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8309       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8311       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8312       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8313       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8314       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8315       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8316       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8317       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8318       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8320 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8321       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8322       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8323       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8324       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8325       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8326       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8327       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8328       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8329 #endif
8331 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8332       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8333       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8334       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8335       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8336       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8337       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8338       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8339       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8340       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8341       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8342       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8343       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8344       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8345       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8346       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8347       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8348       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8349       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8350       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8351       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8352       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8353       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8354       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8355       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8356       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8357       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8358       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8359       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8360       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8361       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8362       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8363       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8364       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8365       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8366       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8367       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8368 #endif
8369 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8370       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8371       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8372       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8373       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8374       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8375       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8376       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8377       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8378       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8379       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8380       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8381       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8382       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8383       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8384       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8385       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8386       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8387       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8388       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8389       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8390       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8391       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8392       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8393       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8394       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8395       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8396       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8397       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8398       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8399       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8400       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8401       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8402       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8403       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8404       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8405       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8406 #endif
8407 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8408       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8409       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8410       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8411       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8412       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8413       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8414       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8415       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8416       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8417       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8418       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8419       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8420       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8421       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8422       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8423       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8424       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8425       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8426       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8427       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8428       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8429       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8430       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8431       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8432       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8433       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8434       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8435       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8436       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8437       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8438       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8439       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8440       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8441       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8442       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8443       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8444 #endif
8445 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8446       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8447       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8448       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8449       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8450       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8451       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8452       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8453       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8454       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8455       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8456       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8457       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8458       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8459       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8460       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8461       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8462       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8463       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8464       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8465       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8466       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8467       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8468       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8469       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8470       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8471       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8472       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8473       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8474       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8475       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8476       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8477       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8478       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8479       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8480       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8481       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8482 #endif
8483     }
8485   fesetround (save_round_mode);
8487   END (fma_towardzero);
8491 static void
8492 fma_test_downward (void)
8494   int save_round_mode;
8495   START (fma_downward);
8497   save_round_mode = fegetround ();
8499   if (!fesetround (FE_DOWNWARD))
8500     {
8501       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8502       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
8503       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
8504       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8505       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
8506       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8507       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8508       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
8509       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8510       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
8511       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
8512       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8513       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
8514       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8515       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8516       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
8517       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8518       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
8519       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
8520       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8521       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
8522       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8523       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8524       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
8526       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
8527       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
8528       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
8529       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
8531       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8532       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8533       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8534       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8535       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8536       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8537       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8538       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8540 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8541       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8542       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8543       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8544       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8545       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8546       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8547       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8548       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8549 #endif
8551 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8552       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8553       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8554       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8555       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8556       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8557       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8558       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8559       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8560       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8561       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8562       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8563       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
8564       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8565       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8566       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8567       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
8568       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8569       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8570       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8571       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8572       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8573       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8574       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8575       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
8576       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8577       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8578       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8579       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8580       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8581       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8582       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8583       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
8584       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8585       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8586       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8587       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
8588 #endif
8589 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8590       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8591       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8592       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8593       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8594       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8595       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8596       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8597       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8598       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8599       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8600       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8601       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
8602       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8603       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8604       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8605       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
8606       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8607       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8608       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8609       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8610       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8611       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8612       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8613       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
8614       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8615       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8616       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8617       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8618       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8619       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8620       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8621       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
8622       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8623       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8624       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8625       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
8626 #endif
8627 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8628       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8629       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8630       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8631       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8632       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8633       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8634       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8635       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8636       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8637       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8638       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8639       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
8640       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8641       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8642       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8643       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
8644       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8645       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8646       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8647       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8648       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8649       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8650       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8651       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
8652       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8653       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8654       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8655       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8656       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8657       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8658       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8659       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
8660       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8661       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8662       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8663       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
8664 #endif
8665 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8666       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8667       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8668       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8669       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8670       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8671       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8672       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8673       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8674       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8675       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8676       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8677       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8678       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8679       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8680       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8681       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
8682       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8683       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8684       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8685       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8686       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8687       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8688       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8689       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
8690       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8691       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8692       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8693       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8694       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8695       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8696       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8697       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8698       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8699       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8700       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8701       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
8702 #endif
8703     }
8705   fesetround (save_round_mode);
8707   END (fma_downward);
8711 static void
8712 fma_test_upward (void)
8714   int save_round_mode;
8715   START (fma_upward);
8717   save_round_mode = fegetround ();
8719   if (!fesetround (FE_UPWARD))
8720     {
8721       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8722       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8723       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8724       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8725       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8726       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8727       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8728       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8729       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8730       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8731       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8732       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8733       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8734       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8735       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8736       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8737       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8738       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8739       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8740       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8741       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8742       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8743       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8744       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8746       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8747       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8748       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8749       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8751       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8752       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8753       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8754       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8755       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8756       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8757       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8758       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8760 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8761       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8762       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8763       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8764       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8765       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8766       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8767       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8768       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8769 #endif
8771 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8772       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8773       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8774       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8775       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8776       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8777       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8778       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8779       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8780       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
8781       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8782       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8783       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8784       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
8785       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8786       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8787       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8788       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8789       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8790       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8791       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8792       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
8793       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8794       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8795       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8796       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8797       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8798       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8799       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8800       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
8801       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8802       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8803       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8804       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
8805       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8806       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8807       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8808 #endif
8809 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8810       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8811       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8812       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8813       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8814       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8815       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8816       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8817       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8818       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
8819       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8820       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8821       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8822       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
8823       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8824       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8825       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8826       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8827       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8828       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8829       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8830       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
8831       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8832       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8833       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8834       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8835       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8836       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8837       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8838       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
8839       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8840       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8841       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8842       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
8843       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8844       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8845       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8846 #endif
8847 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8848       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8849       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8850       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8851       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8852       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8853       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8854       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8855       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8856       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
8857       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8858       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8859       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8860       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
8861       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8862       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8863       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8864       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8865       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8866       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8867       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8868       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
8869       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8870       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8871       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8872       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8873       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8874       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8875       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8876       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
8877       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8878       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8879       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8880       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
8881       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8882       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8883       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8884 #endif
8885 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8886       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8887       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8888       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8889       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8890       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8891       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8892       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8893       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8894       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8895       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8896       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8897       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8898       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
8899       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8900       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8901       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8902       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8903       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8904       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8905       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8906       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
8907       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8908       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8909       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8910       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8911       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8912       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8913       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8914       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8915       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8916       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8917       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8918       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
8919       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8920       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8921       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8922 #endif
8923     }
8925   fesetround (save_round_mode);
8927   END (fma_upward);
8931 static void
8932 fmax_test (void)
8934   START (fmax);
8936   TEST_ff_f (fmax, 0, 0, 0);
8937   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
8938   TEST_ff_f (fmax, 9, 0, 9);
8939   TEST_ff_f (fmax, 0, 9, 9);
8940   TEST_ff_f (fmax, -9, 0, 0);
8941   TEST_ff_f (fmax, 0, -9, 0);
8943   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
8944   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
8945   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
8946   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
8948   TEST_ff_f (fmax, minus_infty, 9, 9);
8949   TEST_ff_f (fmax, minus_infty, -9, -9);
8950   TEST_ff_f (fmax, 9, minus_infty, 9);
8951   TEST_ff_f (fmax, -9, minus_infty, -9);
8953   TEST_ff_f (fmax, 0, qnan_value, 0);
8954   TEST_ff_f (fmax, 9, qnan_value, 9);
8955   TEST_ff_f (fmax, -9, qnan_value, -9);
8956   TEST_ff_f (fmax, qnan_value, 0, 0);
8957   TEST_ff_f (fmax, qnan_value, 9, 9);
8958   TEST_ff_f (fmax, qnan_value, -9, -9);
8959   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
8960   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
8961   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
8962   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
8963   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
8965   END (fmax);
8969 static void
8970 fmin_test (void)
8972   START (fmin);
8974   TEST_ff_f (fmin, 0, 0, 0);
8975   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
8976   TEST_ff_f (fmin, 9, 0, 0);
8977   TEST_ff_f (fmin, 0, 9, 0);
8978   TEST_ff_f (fmin, -9, 0, -9);
8979   TEST_ff_f (fmin, 0, -9, -9);
8981   TEST_ff_f (fmin, plus_infty, 9, 9);
8982   TEST_ff_f (fmin, 9, plus_infty, 9);
8983   TEST_ff_f (fmin, plus_infty, -9, -9);
8984   TEST_ff_f (fmin, -9, plus_infty, -9);
8985   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
8986   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
8987   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
8988   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
8990   TEST_ff_f (fmin, 0, qnan_value, 0);
8991   TEST_ff_f (fmin, 9, qnan_value, 9);
8992   TEST_ff_f (fmin, -9, qnan_value, -9);
8993   TEST_ff_f (fmin, qnan_value, 0, 0);
8994   TEST_ff_f (fmin, qnan_value, 9, 9);
8995   TEST_ff_f (fmin, qnan_value, -9, -9);
8996   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
8997   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
8998   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
8999   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
9000   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
9002   END (fmin);
9006 static void
9007 fmod_test (void)
9009   errno = 0;
9010   FUNC(fmod) (6.5, 2.3L);
9011   if (errno == ENOSYS)
9012     /* Function not implemented.  */
9013     return;
9015   START (fmod);
9017   /* fmod (+0, y) == +0 for y != 0.  */
9018   TEST_ff_f (fmod, 0, 3, 0);
9020   /* fmod (-0, y) == -0 for y != 0.  */
9021   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
9023   /* fmod (+inf, y) == qNaN plus invalid exception.  */
9024   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9025   /* fmod (-inf, y) == qNaN plus invalid exception.  */
9026   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9027   /* fmod (x, +0) == qNaN plus invalid exception.  */
9028   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9029   /* fmod (x, -0) == qNaN plus invalid exception.  */
9030   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
9032   /* fmod (x, +inf) == x for x not infinite.  */
9033   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
9034   /* fmod (x, -inf) == x for x not infinite.  */
9035   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
9037   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
9039   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
9040   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
9041   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
9042   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
9044   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
9045 #ifndef TEST_FLOAT
9046   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
9047 #endif
9048 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
9049   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
9050 #endif
9052   END (fmod);
9056 static void
9057 fpclassify_test (void)
9059   START (fpclassify);
9061   TEST_f_i (fpclassify, qnan_value, FP_NAN);
9062   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
9063   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
9064   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
9065   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
9066   TEST_f_i (fpclassify, 1000, FP_NORMAL);
9067   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
9069   END (fpclassify);
9073 static void
9074 frexp_test (void)
9076   int x;
9078   START (frexp);
9080   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
9081   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
9082   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
9084   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
9085   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
9087   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
9088   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
9090   END (frexp);
9094 static void
9095 gamma_test (void)
9097   errno = 0;
9098   FUNC(gamma) (1);
9100   if (errno == ENOSYS)
9101     /* Function not implemented.  */
9102     return;
9104   START (gamma);
9106   TEST_f_f (gamma, plus_infty, plus_infty);
9107   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9108   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9109   TEST_f_f (gamma, minus_infty, plus_infty);
9110   TEST_f_f (gamma, qnan_value, qnan_value);
9112   TEST_f_f1 (gamma, 1, 0, 1);
9113   TEST_f_f1 (gamma, 3, M_LN2l, 1);
9115   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
9116   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9118   END (gamma);
9121 static void
9122 hypot_test (void)
9124   errno = 0;
9125   FUNC(hypot) (0.7L, 12.4L);
9126   if (errno == ENOSYS)
9127     /* Function not implemented.  */
9128     return;
9130   START (hypot);
9132   TEST_ff_f (hypot, plus_infty, 1, plus_infty);
9133   TEST_ff_f (hypot, minus_infty, 1, plus_infty);
9135 #ifndef TEST_INLINE
9136   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
9137   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
9138   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
9139   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
9140 #endif
9142   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
9144   /* hypot (x,y) == hypot (+-x, +-y)  */
9145   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
9146   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
9147   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
9148   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
9149   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
9150   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
9151   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
9152   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
9154   /*  hypot (x,0) == fabs (x)  */
9155   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
9156   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
9157   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
9159   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
9161   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
9162   TEST_ff_f (hypot, 0x1p+0L, 0x1.fp-129L, 0x1p+0L);
9163 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
9164   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
9165 #endif
9167 #if !(defined TEST_FLOAT && defined TEST_INLINE)
9168   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
9169   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
9170 #endif
9172 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
9173   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
9174   TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L);
9175 #endif
9177 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
9178   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
9179 #endif
9181   END (hypot);
9185 static void
9186 ilogb_test (void)
9188   START (ilogb);
9190   TEST_f_i (ilogb, 1, 0);
9191   TEST_f_i (ilogb, M_El, 1);
9192   TEST_f_i (ilogb, 1024, 10);
9193   TEST_f_i (ilogb, -2000, 10);
9195   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
9196   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION|ERRNO_EDOM);
9197   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
9198   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION|ERRNO_EDOM);
9199   /* ilogb (inf) == INT_MAX plus invalid exception  */
9200   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9201   /* ilogb (-inf) == INT_MAX plus invalid exception  */
9202   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9204   END (ilogb);
9207 static void
9208 isfinite_test (void)
9210   START (isfinite);
9212   TEST_f_b (isfinite, 0, 1);
9213   TEST_f_b (isfinite, minus_zero, 1);
9214   TEST_f_b (isfinite, 10, 1);
9215   TEST_f_b (isfinite, min_subnorm_value, 1);
9216   TEST_f_b (isfinite, plus_infty, 0);
9217   TEST_f_b (isfinite, minus_infty, 0);
9218   TEST_f_b (isfinite, qnan_value, 0);
9220   END (isfinite);
9223 static void
9224 isgreater_test (void)
9226   START (isgreater);
9228   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
9229   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
9230   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
9231   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
9232   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
9233   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
9234   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
9235   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
9236   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
9237   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
9238   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
9239   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
9240   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
9241   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
9242   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
9243   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
9245   END (isgreater);
9248 static void
9249 isgreaterequal_test (void)
9251   START (isgreaterequal);
9253   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
9254   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
9255   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
9256   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
9257   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
9258   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
9259   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
9260   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
9261   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
9262   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
9263   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
9264   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
9265   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
9266   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
9267   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
9268   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
9270   END (isgreaterequal);
9273 static void
9274 isinf_test (void)
9276   START (isinf);
9278   TEST_f_b (isinf, 0, 0);
9279   TEST_f_b (isinf, minus_zero, 0);
9280   TEST_f_b (isinf, 10, 0);
9281   TEST_f_b (isinf, min_subnorm_value, 0);
9282   TEST_f_b (isinf, plus_infty, 1);
9283   TEST_f_b (isinf, minus_infty, 1);
9284   TEST_f_b (isinf, qnan_value, 0);
9286   END (isinf);
9289 static void
9290 isless_test (void)
9292   START (isless);
9294   TEST_ff_i (isless, minus_zero, minus_zero, 0);
9295   TEST_ff_i (isless, minus_zero, plus_zero, 0);
9296   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
9297   TEST_ff_i (isless, minus_zero, qnan_value, 0);
9298   TEST_ff_i (isless, plus_zero, minus_zero, 0);
9299   TEST_ff_i (isless, plus_zero, plus_zero, 0);
9300   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
9301   TEST_ff_i (isless, plus_zero, qnan_value, 0);
9302   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
9303   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
9304   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
9305   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
9306   TEST_ff_i (isless, qnan_value, minus_zero, 0);
9307   TEST_ff_i (isless, qnan_value, plus_zero, 0);
9308   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
9309   TEST_ff_i (isless, qnan_value, qnan_value, 0);
9311   END (isless);
9314 static void
9315 islessequal_test (void)
9317   START (islessequal);
9319   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
9320   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
9321   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
9322   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
9323   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
9324   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
9325   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
9326   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
9327   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
9328   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
9329   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
9330   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
9331   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
9332   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
9333   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
9334   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
9336   END (islessequal);
9339 static void
9340 islessgreater_test (void)
9342   START (islessgreater);
9344   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
9345   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
9346   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
9347   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
9348   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
9349   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
9350   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
9351   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
9352   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
9353   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
9354   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
9355   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
9356   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
9357   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
9358   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
9359   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
9361   END (islessgreater);
9364 static void
9365 isnan_test (void)
9367   START (isnan);
9369   TEST_f_b (isnan, 0, 0);
9370   TEST_f_b (isnan, minus_zero, 0);
9371   TEST_f_b (isnan, 10, 0);
9372   TEST_f_b (isnan, min_subnorm_value, 0);
9373   TEST_f_b (isnan, plus_infty, 0);
9374   TEST_f_b (isnan, minus_infty, 0);
9375   TEST_f_b (isnan, qnan_value, 1);
9377   END (isnan);
9380 static void
9381 isnormal_test (void)
9383   START (isnormal);
9385   TEST_f_b (isnormal, 0, 0);
9386   TEST_f_b (isnormal, minus_zero, 0);
9387   TEST_f_b (isnormal, 10, 1);
9388   TEST_f_b (isnormal, min_subnorm_value, 0);
9389   TEST_f_b (isnormal, plus_infty, 0);
9390   TEST_f_b (isnormal, minus_infty, 0);
9391   TEST_f_b (isnormal, qnan_value, 0);
9393   END (isnormal);
9396 static void
9397 issignaling_test (void)
9399   START (issignaling);
9401   TEST_f_b (issignaling, 0, 0);
9402   TEST_f_b (issignaling, minus_zero, 0);
9403   TEST_f_b (issignaling, 10, 0);
9404   TEST_f_b (issignaling, min_subnorm_value, 0);
9405   TEST_f_b (issignaling, plus_infty, 0);
9406   TEST_f_b (issignaling, minus_infty, 0);
9407   TEST_f_b (issignaling, qnan_value, 0);
9409   END (issignaling);
9412 static void
9413 isunordered_test (void)
9415   START (isunordered);
9417   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
9418   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
9419   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
9420   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
9421   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
9422   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
9423   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
9424   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
9425   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
9426   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
9427   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
9428   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
9429   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
9430   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
9431   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
9432   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
9434   END (isunordered);
9437 static void
9438 j0_test (void)
9440   FLOAT s, c;
9441   errno = 0;
9442   FUNC (sincos) (0, &s, &c);
9443   if (errno == ENOSYS)
9444     /* Required function not implemented.  */
9445     return;
9446   FUNC(j0) (0);
9447   if (errno == ENOSYS)
9448     /* Function not implemented.  */
9449     return;
9451   START (j0);
9453   /* j0 is the Bessel function of the first kind of order 0 */
9454   TEST_f_f (j0, qnan_value, qnan_value);
9455   TEST_f_f (j0, plus_infty, 0);
9456   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
9457   TEST_f_f (j0, 0.0, 1.0);
9458   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
9459   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
9460   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
9461   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
9462   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
9463   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
9464   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
9465   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9466   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9468   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
9470 #ifndef TEST_FLOAT
9471   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
9472   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
9473 #endif
9475 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9476   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
9477   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
9478 #endif
9480   END (j0);
9484 static void
9485 j1_test (void)
9487   FLOAT s, c;
9488   errno = 0;
9489   FUNC (sincos) (0, &s, &c);
9490   if (errno == ENOSYS)
9491     /* Required function not implemented.  */
9492     return;
9493   FUNC(j1) (0);
9494   if (errno == ENOSYS)
9495     /* Function not implemented.  */
9496     return;
9498   /* j1 is the Bessel function of the first kind of order 1 */
9500   START (j1);
9502   TEST_f_f (j1, qnan_value, qnan_value);
9503   TEST_f_f (j1, plus_infty, 0);
9505   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
9506   TEST_f_f (j1, 0.0, 0.0);
9507   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
9508   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
9509   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
9510   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
9511   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
9512   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
9513   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
9515   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
9517 #ifndef TEST_FLOAT
9518   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
9519   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
9520 #endif
9522 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9523   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
9524   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
9525 #endif
9527   END (j1);
9530 static void
9531 jn_test (void)
9533   FLOAT s, c;
9534   errno = 0;
9535   FUNC (sincos) (0, &s, &c);
9536   if (errno == ENOSYS)
9537     /* Required function not implemented.  */
9538     return;
9539   FUNC(jn) (1, 1);
9540   if (errno == ENOSYS)
9541     /* Function not implemented.  */
9542     return;
9544   /* jn is the Bessel function of the first kind of order n.  */
9545   START (jn);
9547   /* jn (0, x) == j0 (x)  */
9548   TEST_ff_f (jn, 0, qnan_value, qnan_value);
9549   TEST_ff_f (jn, 0, plus_infty, 0);
9550   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
9551   TEST_ff_f (jn, 0, 0.0, 1.0);
9552   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
9553   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
9554   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
9555   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
9556   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
9557   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
9558   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
9559   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9560   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9562   /* jn (1, x) == j1 (x)  */
9563   TEST_ff_f (jn, 1, qnan_value, qnan_value);
9564   TEST_ff_f (jn, 1, plus_infty, 0);
9565   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
9566   TEST_ff_f (jn, 1, 0.0, 0.0);
9567   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
9568   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
9569   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
9570   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
9571   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
9572   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
9573   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
9575   /* jn (3, x)  */
9576   TEST_ff_f (jn, 3, qnan_value, qnan_value);
9577   TEST_ff_f (jn, 3, plus_infty, 0);
9579   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
9580   TEST_ff_f (jn, 3, 0.0, 0.0);
9581   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
9582   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
9583   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
9584   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
9585   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
9587   /*  jn (10, x)  */
9588   TEST_ff_f (jn, 10, qnan_value, qnan_value);
9589   TEST_ff_f (jn, 10, plus_infty, 0);
9591   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
9592   TEST_ff_f (jn, 10, 0.0, 0.0);
9593   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
9594   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
9595   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
9596   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
9597   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
9599   /* BZ #11589 .*/
9600   TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
9601   TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
9602   TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
9603   TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
9604   TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
9605   TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
9606   TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
9607   TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
9609   /* Bug 14155: spurious exception may occur.  */
9610   TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
9612   END (jn);
9616 static void
9617 ldexp_test (void)
9619   START (ldexp);
9621   TEST_ff_f (ldexp, 0, 0, 0);
9622   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
9624   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
9625   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
9626   TEST_ff_f (ldexp, qnan_value, 1, qnan_value);
9628   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
9629   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
9631   /* ldexp (x, 0) == x.  */
9632   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
9634   END (ldexp);
9638 static void
9639 lgamma_test (void)
9641   errno = 0;
9642   FUNC(lgamma) (0);
9643   if (errno == ENOSYS)
9644     /* Function not implemented.  */
9645     return;
9647   START (lgamma);
9649   TEST_f_f1 (lgamma, plus_infty, plus_infty, 1);
9650   TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9651   TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION);
9652   TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE);
9654   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
9655   TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
9656   TEST_f_f1 (lgamma, minus_infty, plus_infty, IGNORE);
9657   TEST_f_f1 (lgamma, -max_value, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9658   TEST_f_f1 (lgamma, max_value, plus_infty, 1, OVERFLOW_EXCEPTION);
9660   TEST_f_f1 (lgamma, 1, 0, 1);
9662   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
9664   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
9665   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9666   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
9667   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
9669   END (lgamma);
9673 static void
9674 lrint_test (void)
9676   /* XXX this test is incomplete.  We need to have a way to specifiy
9677      the rounding method and test the critical cases.  So far, only
9678      unproblematic numbers are tested.  */
9679   /* TODO: missing +/-Inf as well as qNaN tests.  */
9681   START (lrint);
9683   TEST_f_l (lrint, 0.0, 0);
9684   TEST_f_l (lrint, minus_zero, 0);
9685   TEST_f_l (lrint, 0.2L, 0);
9686   TEST_f_l (lrint, -0.2L, 0);
9688   TEST_f_l (lrint, 1.4L, 1);
9689   TEST_f_l (lrint, -1.4L, -1);
9691   TEST_f_l (lrint, 8388600.3L, 8388600);
9692   TEST_f_l (lrint, -8388600.3L, -8388600);
9694   TEST_f_l (lrint, 1071930.0008, 1071930);
9695 #ifndef TEST_FLOAT
9696   TEST_f_l (lrint, 1073741824.01, 1073741824);
9697 # if LONG_MAX > 281474976710656
9698   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9699 # endif
9700 #endif
9702   END (lrint);
9706 static void
9707 lrint_test_tonearest (void)
9709   int save_round_mode;
9710   START (lrint_tonearest);
9712   save_round_mode = fegetround ();
9714   if (!fesetround (FE_TONEAREST))
9715     {
9716       TEST_f_l (lrint, 0.0, 0);
9717       TEST_f_l (lrint, minus_zero, 0);
9718       TEST_f_l (lrint, 0.2L, 0);
9719       TEST_f_l (lrint, -0.2L, 0);
9720       TEST_f_l (lrint, 0.5L, 0);
9721       TEST_f_l (lrint, -0.5L, 0);
9722       TEST_f_l (lrint, 0.8L, 1);
9723       TEST_f_l (lrint, -0.8L, -1);
9725       TEST_f_l (lrint, 1.4L, 1);
9726       TEST_f_l (lrint, -1.4L, -1);
9728       TEST_f_l (lrint, 8388600.3L, 8388600);
9729       TEST_f_l (lrint, -8388600.3L, -8388600);
9731       TEST_f_l (lrint, 1071930.0008, 1071930);
9732 #ifndef TEST_FLOAT
9733       TEST_f_l (lrint, 1073741824.01, 1073741824);
9734 # if LONG_MAX > 281474976710656
9735       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9736 # endif
9737 #endif
9738     }
9740   fesetround (save_round_mode);
9742   END (lrint_tonearest);
9746 static void
9747 lrint_test_towardzero (void)
9749   int save_round_mode;
9750   START (lrint_towardzero);
9752   save_round_mode = fegetround ();
9754   if (!fesetround (FE_TOWARDZERO))
9755     {
9756       TEST_f_l (lrint, 0.0, 0);
9757       TEST_f_l (lrint, minus_zero, 0);
9758       TEST_f_l (lrint, 0.2L, 0);
9759       TEST_f_l (lrint, -0.2L, 0);
9760       TEST_f_l (lrint, 0.5L, 0);
9761       TEST_f_l (lrint, -0.5L, 0);
9762       TEST_f_l (lrint, 0.8L, 0);
9763       TEST_f_l (lrint, -0.8L, 0);
9765       TEST_f_l (lrint, 1.4L, 1);
9766       TEST_f_l (lrint, -1.4L, -1);
9768       TEST_f_l (lrint, 8388600.3L, 8388600);
9769       TEST_f_l (lrint, -8388600.3L, -8388600);
9771       TEST_f_l (lrint, 1071930.0008, 1071930);
9772 #ifndef TEST_FLOAT
9773       TEST_f_l (lrint, 1073741824.01, 1073741824);
9774 # if LONG_MAX > 281474976710656
9775       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9776 # endif
9777 #endif
9778     }
9780   fesetround (save_round_mode);
9782   END (lrint_towardzero);
9786 static void
9787 lrint_test_downward (void)
9789   int save_round_mode;
9790   START (lrint_downward);
9792   save_round_mode = fegetround ();
9794   if (!fesetround (FE_DOWNWARD))
9795     {
9796       TEST_f_l (lrint, 0.0, 0);
9797       TEST_f_l (lrint, minus_zero, 0);
9798       TEST_f_l (lrint, 0.2L, 0);
9799       TEST_f_l (lrint, -0.2L, -1);
9800       TEST_f_l (lrint, 0.5L, 0);
9801       TEST_f_l (lrint, -0.5L, -1);
9802       TEST_f_l (lrint, 0.8L, 0);
9803       TEST_f_l (lrint, -0.8L, -1);
9805       TEST_f_l (lrint, 1.4L, 1);
9806       TEST_f_l (lrint, -1.4L, -2);
9808       TEST_f_l (lrint, 8388600.3L, 8388600);
9809       TEST_f_l (lrint, -8388600.3L, -8388601);
9811       TEST_f_l (lrint, 1071930.0008, 1071930);
9812 #ifndef TEST_FLOAT
9813       TEST_f_l (lrint, 1073741824.01, 1073741824);
9814 # if LONG_MAX > 281474976710656
9815       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9816 # endif
9817 #endif
9818     }
9820   fesetround (save_round_mode);
9822   END (lrint_downward);
9826 static void
9827 lrint_test_upward (void)
9829   int save_round_mode;
9830   START (lrint_upward);
9832   save_round_mode = fegetround ();
9834   if (!fesetround (FE_UPWARD))
9835     {
9836       TEST_f_l (lrint, 0.0, 0);
9837       TEST_f_l (lrint, minus_zero, 0);
9838       TEST_f_l (lrint, 0.2L, 1);
9839       TEST_f_l (lrint, -0.2L, 0);
9840       TEST_f_l (lrint, 0.5L, 1);
9841       TEST_f_l (lrint, -0.5L, 0);
9842       TEST_f_l (lrint, 0.8L, 1);
9843       TEST_f_l (lrint, -0.8L, 0);
9845       TEST_f_l (lrint, 1.4L, 2);
9846       TEST_f_l (lrint, -1.4L, -1);
9848       TEST_f_l (lrint, 8388600.3L, 8388601);
9849       TEST_f_l (lrint, -8388600.3L, -8388600);
9851 #ifndef TEST_FLOAT
9852       TEST_f_l (lrint, 1071930.0008, 1071931);
9853       TEST_f_l (lrint, 1073741824.01, 1073741825);
9854 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
9855       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9856 # endif
9857 #endif
9858     }
9860   fesetround (save_round_mode);
9862   END (lrint_upward);
9866 static void
9867 llrint_test (void)
9869   /* XXX this test is incomplete.  We need to have a way to specifiy
9870      the rounding method and test the critical cases.  So far, only
9871      unproblematic numbers are tested.  */
9872   /* TODO: missing +/-Inf as well as qNaN tests.  */
9874   START (llrint);
9876   TEST_f_L (llrint, 0.0, 0);
9877   TEST_f_L (llrint, minus_zero, 0);
9878   TEST_f_L (llrint, 0.2L, 0);
9879   TEST_f_L (llrint, -0.2L, 0);
9881   TEST_f_L (llrint, 1.4L, 1);
9882   TEST_f_L (llrint, -1.4L, -1);
9884   TEST_f_L (llrint, 8388600.3L, 8388600);
9885   TEST_f_L (llrint, -8388600.3L, -8388600);
9887   TEST_f_l (llrint, 1071930.0008, 1071930);
9889   /* Test boundary conditions.  */
9890   /* 0x1FFFFF */
9891   TEST_f_L (llrint, 2097151.0,2097151LL);
9892   /* 0x800000 */
9893   TEST_f_L (llrint, 8388608.0, 8388608LL);
9894   /* 0x1000000 */
9895   TEST_f_L (llrint, 16777216.0, 16777216LL);
9896   /* 0x20000000000 */
9897   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9898   /* 0x40000000000 */
9899   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9900   /* 0x1000000000000 */
9901   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9902   /* 0x10000000000000 */
9903   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9904   /* 0x10000080000000 */
9905   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9906   /* 0x20000000000000 */
9907   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9908   /* 0x80000000000000 */
9909   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9910   /* 0x100000000000000 */
9911   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9912 #ifdef TEST_LDOUBLE
9913   /* The input can only be represented in long double.  */
9914   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9915   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9916   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9917   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9918   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9920   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9921   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9922   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9923   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9924   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9926 # if LDBL_MANT_DIG > 100
9927   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9928   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9929   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9930   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9931   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9932   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9934   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9935   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9936   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9937   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9938   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9939   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9940 #endif
9942   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9943   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9944   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9945   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9946   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9948   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9949   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9950   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9951   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9952   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9954 # if LDBL_MANT_DIG > 100
9955   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9956   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9957   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9958   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9959   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9960   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9962   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9963   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9964   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9965   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9966   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9967   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9968 #endif
9970   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9971   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9972   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9973   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9974   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9976   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9977   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9978   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9979   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9980   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9982 # if LDBL_MANT_DIG > 100
9983   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9984   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9985   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9986   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9987   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9988   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9989   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9990   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9991   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9992   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9993   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9994   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9995 # endif
9996 #endif
9998   END (llrint);
10001 static void
10002 llrint_test_tonearest (void)
10004   int save_round_mode;
10005   START (llrint_tonearest);
10007   save_round_mode = fegetround ();
10009   if (!fesetround (FE_TONEAREST))
10010     {
10011       TEST_f_L (llrint, 0.0, 0);
10012       TEST_f_L (llrint, minus_zero, 0);
10013       TEST_f_L (llrint, 0.2L, 0);
10014       TEST_f_L (llrint, -0.2L, 0);
10016       TEST_f_L (llrint, 1.4L, 1);
10017       TEST_f_L (llrint, -1.4L, -1);
10019       TEST_f_L (llrint, 8388600.3L, 8388600);
10020       TEST_f_L (llrint, -8388600.3L, -8388600);
10022       TEST_f_l (llrint, 1071930.0008, 1071930);
10024       /* Test boundary conditions.  */
10025       /* 0x1FFFFF */
10026       TEST_f_L (llrint, 2097151.0,2097151LL);
10027       /* 0x800000 */
10028       TEST_f_L (llrint, 8388608.0, 8388608LL);
10029       /* 0x1000000 */
10030       TEST_f_L (llrint, 16777216.0, 16777216LL);
10031       /* 0x20000000000 */
10032       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10033       /* 0x40000000000 */
10034       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10035       /* 0x1000000000000 */
10036       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10037       /* 0x10000000000000 */
10038       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10039       /* 0x10000080000000 */
10040       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10041       /* 0x20000000000000 */
10042       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10043       /* 0x80000000000000 */
10044       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10045       /* 0x100000000000000 */
10046       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10047 #ifdef TEST_LDOUBLE
10048       /* The input can only be represented in long double.  */
10049       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10050       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10051       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10052       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10053       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10055       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10056       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10057       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10058       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10059       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10061 # if LDBL_MANT_DIG > 100
10062       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10063       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10064       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10065       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10066       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10067       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10069       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10070       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10071       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10072       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10073       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10074       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10075 #endif
10077       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10078       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10079       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10080       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10081       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10083       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10084       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10085       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10086       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10087       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10089 # if LDBL_MANT_DIG > 100
10090       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10091       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10092       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10093       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10094       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10095       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10097       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10098       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10099       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10100       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10101       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10102       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10103 #endif
10105       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10106       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10107       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10108       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10109       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10111       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10112       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10113       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10114       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10115       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10117 # if LDBL_MANT_DIG > 100
10118       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10119       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10120       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10121       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10122       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10123       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10124       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10125       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10126       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10127       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10128       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10129       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10130 # endif
10131 #endif
10132     }
10134   fesetround (save_round_mode);
10136   END (llrint_tonearest);
10139 static void
10140 llrint_test_towardzero (void)
10142   int save_round_mode;
10143   START (llrint_towardzero);
10145   save_round_mode = fegetround ();
10147   if (!fesetround (FE_TOWARDZERO))
10148     {
10149       TEST_f_L (llrint, 0.0, 0);
10150       TEST_f_L (llrint, minus_zero, 0);
10151       TEST_f_L (llrint, 0.2L, 0);
10152       TEST_f_L (llrint, -0.2L, 0);
10154       TEST_f_L (llrint, 1.4L, 1);
10155       TEST_f_L (llrint, -1.4L, -1);
10157       TEST_f_L (llrint, 8388600.3L, 8388600);
10158       TEST_f_L (llrint, -8388600.3L, -8388600);
10160       TEST_f_l (llrint, 1071930.0008, 1071930);
10162       /* Test boundary conditions.  */
10163       /* 0x1FFFFF */
10164       TEST_f_L (llrint, 2097151.0,2097151LL);
10165       /* 0x800000 */
10166       TEST_f_L (llrint, 8388608.0, 8388608LL);
10167       /* 0x1000000 */
10168       TEST_f_L (llrint, 16777216.0, 16777216LL);
10169       /* 0x20000000000 */
10170       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10171       /* 0x40000000000 */
10172       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10173       /* 0x1000000000000 */
10174       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10175       /* 0x10000000000000 */
10176       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10177       /* 0x10000080000000 */
10178       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10179       /* 0x20000000000000 */
10180       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10181       /* 0x80000000000000 */
10182       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10183       /* 0x100000000000000 */
10184       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10185 #ifdef TEST_LDOUBLE
10186       /* The input can only be represented in long double.  */
10187       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10188       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10189       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10190       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10191       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10193       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10194       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10195       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10196       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10197       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10199 # if LDBL_MANT_DIG > 100
10200       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10201       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10202       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10203       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10204       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10205       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10207       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10208       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10209       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10210       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10211       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10212       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10213 #endif
10215       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10216       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10217       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10218       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10219       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10221       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10222       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10223       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10224       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10225       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10227 # if LDBL_MANT_DIG > 100
10228       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10229       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10230       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10231       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10232       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10233       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10235       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10236       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10237       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10238       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10239       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10240       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10241 #endif
10243       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10244       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10245       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10246       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10247       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10249       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10250       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10251       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10252       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10253       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10255 # if LDBL_MANT_DIG > 100
10256       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10257       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10258       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10259       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10260       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10261       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10262       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10263       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10264       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10265       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10266       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10267       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10268 # endif
10269 #endif
10270     }
10272   fesetround (save_round_mode);
10274   END (llrint_towardzero);
10277 static void
10278 llrint_test_downward (void)
10280   int save_round_mode;
10281   START (llrint_downward);
10283   save_round_mode = fegetround ();
10285   if (!fesetround (FE_DOWNWARD))
10286     {
10287       TEST_f_L (llrint, 0.0, 0);
10288       TEST_f_L (llrint, minus_zero, 0);
10289       TEST_f_L (llrint, 0.2L, 0);
10290       TEST_f_L (llrint, -0.2L, -1);
10292       TEST_f_L (llrint, 1.4L, 1);
10293       TEST_f_L (llrint, -1.4L, -2);
10295       TEST_f_L (llrint, 8388600.3L, 8388600);
10296       TEST_f_L (llrint, -8388600.3L, -8388601);
10298       TEST_f_l (llrint, 1071930.0008, 1071930);
10300       /* Test boundary conditions.  */
10301       /* 0x1FFFFF */
10302       TEST_f_L (llrint, 2097151.0,2097151LL);
10303       /* 0x800000 */
10304       TEST_f_L (llrint, 8388608.0, 8388608LL);
10305       /* 0x1000000 */
10306       TEST_f_L (llrint, 16777216.0, 16777216LL);
10307       /* 0x20000000000 */
10308       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10309       /* 0x40000000000 */
10310       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10311       /* 0x1000000000000 */
10312       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10313       /* 0x10000000000000 */
10314       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10315       /* 0x10000080000000 */
10316       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10317       /* 0x20000000000000 */
10318       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10319       /* 0x80000000000000 */
10320       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10321       /* 0x100000000000000 */
10322       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10323 #ifdef TEST_LDOUBLE
10324       /* The input can only be represented in long double.  */
10325       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10326       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10327       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10328       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10329       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10331       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10332       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10333       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10334       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10335       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10336       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10338       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10339       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
10340       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
10341       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10342       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10344       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
10345       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
10346       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
10347       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10348       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10349       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10351       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10352       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10353       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10354       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10355       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10357       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10358       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10359       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10360       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10361       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10362       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10364       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10365       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
10366       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
10367       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10368       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10370       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
10371       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
10372       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
10373       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10374       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10375       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10377       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10378       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10379       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10380       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10381       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10383       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10384       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
10385       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
10386       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10387       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10389 # if LDBL_MANT_DIG > 100
10390       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10391       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10392       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10393       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10394       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10395       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
10396       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10397       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
10398       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10399       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10400       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10401       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10402 # endif
10403 #endif
10404     }
10406   fesetround (save_round_mode);
10408   END (llrint_downward);
10411 static void
10412 llrint_test_upward (void)
10414   int save_round_mode;
10415   START (llrint_upward);
10417   save_round_mode = fegetround ();
10419   if (!fesetround (FE_UPWARD))
10420     {
10421       TEST_f_L (llrint, 0.0, 0);
10422       TEST_f_L (llrint, minus_zero, 0);
10423       TEST_f_L (llrint, 0.2L, 1);
10424       TEST_f_L (llrint, -0.2L, 0);
10426       TEST_f_L (llrint, 1.4L, 2);
10427       TEST_f_L (llrint, -1.4L, -1);
10429       TEST_f_L (llrint, 8388600.3L, 8388601);
10430       TEST_f_L (llrint, -8388600.3L, -8388600);
10431 #ifndef TEST_FLOAT
10432       TEST_f_l (llrint, 1071930.0008, 1071931);
10433 #endif
10434       /* Test boundary conditions.  */
10435       /* 0x1FFFFF */
10436       TEST_f_L (llrint, 2097151.0,2097151LL);
10437       /* 0x800000 */
10438       TEST_f_L (llrint, 8388608.0, 8388608LL);
10439       /* 0x1000000 */
10440       TEST_f_L (llrint, 16777216.0, 16777216LL);
10441       /* 0x20000000000 */
10442       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10443       /* 0x40000000000 */
10444       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10445       /* 0x1000000000000 */
10446       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10447       /* 0x10000000000000 */
10448       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10449       /* 0x10000080000000 */
10450       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10451       /* 0x20000000000000 */
10452       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10453       /* 0x80000000000000 */
10454       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10455       /* 0x100000000000000 */
10456       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10457 #ifdef TEST_LDOUBLE
10458       /* The input can only be represented in long double.  */
10459       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10460       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
10461       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
10462       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10463       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10465       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
10466       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
10467       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
10468       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10469       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10470       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10472       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10473       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10474       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10475       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10476       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10478       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10479       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10480       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10481       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10482       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10483       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10485       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10486       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
10487       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
10488       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10489       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10491       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
10492       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
10493       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
10494       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10495       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10496       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10498       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10499       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10500       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10501       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10502       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10504       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10505       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10506       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10507       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10508       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10509       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10511       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10512       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
10513       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
10514       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10515       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10517       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10518       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10519       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10520       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10521       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10523 # if LDBL_MANT_DIG > 100
10524       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10525       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10526       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10527       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10528       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
10529       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10530       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
10531       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10532       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10533       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10534       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10535       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10536 # endif
10537 #endif
10538     }
10540   fesetround (save_round_mode);
10542   END (llrint_upward);
10546 static void
10547 log_test (void)
10549   errno = 0;
10550   FUNC(log) (1);
10551   if (errno == ENOSYS)
10552     /* Function not implemented.  */
10553     return;
10554   START (log);
10556   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10557   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10559   TEST_f_f (log, 1, 0);
10561   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
10562   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
10563   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
10564   TEST_f_f (log, plus_infty, plus_infty);
10565   TEST_f_f (log, qnan_value, qnan_value);
10567   TEST_f_f (log, M_El, 1);
10568   TEST_f_f (log, 1.0 / M_El, -1);
10569   TEST_f_f (log, 2, M_LN2l);
10570   TEST_f_f (log, 10, M_LN10l);
10571   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
10573   END (log);
10577 static void
10578 log10_test (void)
10580   errno = 0;
10581   FUNC(log10) (1);
10582   if (errno == ENOSYS)
10583     /* Function not implemented.  */
10584     return;
10586   START (log10);
10588   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10589   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10591   TEST_f_f (log10, 1, 0);
10593   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
10594   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
10595   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
10596   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
10598   TEST_f_f (log10, plus_infty, plus_infty);
10599   TEST_f_f (log10, qnan_value, qnan_value);
10601   TEST_f_f (log10, 0.1L, -1);
10602   TEST_f_f (log10, 10.0, 1);
10603   TEST_f_f (log10, 100.0, 2);
10604   TEST_f_f (log10, 10000.0, 4);
10605   TEST_f_f (log10, M_El, M_LOG10El);
10606   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
10608   END (log10);
10612 static void
10613 log1p_test (void)
10615   errno = 0;
10616   FUNC(log1p) (0);
10617   if (errno == ENOSYS)
10618     /* Function not implemented.  */
10619     return;
10621   START (log1p);
10623   TEST_f_f (log1p, 0, 0);
10624   TEST_f_f (log1p, minus_zero, minus_zero);
10626   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10627   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
10628   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
10629   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
10631   TEST_f_f (log1p, plus_infty, plus_infty);
10632   TEST_f_f (log1p, qnan_value, qnan_value);
10634   TEST_f_f (log1p, M_El - 1.0, 1);
10636   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
10637   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
10639   END (log1p);
10643 static void
10644 log2_test (void)
10646   errno = 0;
10647   FUNC(log2) (1);
10648   if (errno == ENOSYS)
10649     /* Function not implemented.  */
10650     return;
10652   START (log2);
10654   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10655   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10657   TEST_f_f (log2, 1, 0);
10659   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
10660   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
10661   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
10663   TEST_f_f (log2, plus_infty, plus_infty);
10664   TEST_f_f (log2, qnan_value, qnan_value);
10666   TEST_f_f (log2, M_El, M_LOG2El);
10667   TEST_f_f (log2, 2.0, 1);
10668   TEST_f_f (log2, 16.0, 4);
10669   TEST_f_f (log2, 256.0, 8);
10670   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
10672   END (log2);
10676 static void
10677 logb_test (void)
10679   START (logb);
10681   TEST_f_f (logb, plus_infty, plus_infty);
10682   TEST_f_f (logb, minus_infty, plus_infty);
10684   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10686   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10687   TEST_f_f (logb, qnan_value, qnan_value);
10689   TEST_f_f (logb, 1, 0);
10690   TEST_f_f (logb, M_El, 1);
10691   TEST_f_f (logb, 1024, 10);
10692   TEST_f_f (logb, -2000, 10);
10694   TEST_f_f (logb, 0x0.1p-127, -131);
10695   TEST_f_f (logb, 0x0.01p-127, -135);
10696   TEST_f_f (logb, 0x0.011p-127, -135);
10697 #ifndef TEST_FLOAT
10698   TEST_f_f (logb, 0x0.8p-1022, -1023);
10699   TEST_f_f (logb, 0x0.1p-1022, -1026);
10700   TEST_f_f (logb, 0x0.00111p-1022, -1034);
10701   TEST_f_f (logb, 0x0.00001p-1022, -1042);
10702   TEST_f_f (logb, 0x0.000011p-1022, -1042);
10703   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
10704 #endif
10705 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
10706   TEST_f_f (logb, 0x1p-16400L, -16400);
10707   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
10708 #endif
10710   END (logb);
10713 static void
10714 logb_test_downward (void)
10716   int save_round_mode;
10717   errno = 0;
10719   FUNC(logb) (0);
10720   if (errno == ENOSYS)
10721     /* Function not implemented.  */
10722     return;
10724   START (logb_downward);
10726   save_round_mode = fegetround ();
10728   if (!fesetround (FE_DOWNWARD))
10729     {
10731       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
10732          should not return -0 from logb in any rounding mode.  PowerPC32 has
10733          failed with this test for power4 logb (and logbl on all PowerPC
10734          platforms) in the past due to instruction selection.  GCC PR 52775
10735          provides the availability of the fcfid insn in 32-bit mode which
10736          eliminates the use of fsub in this instance and prevents the negative
10737          signed 0.0.  */
10739       /* BZ #887  */
10740       TEST_f_f (logb, 1.000e+0, plus_zero);
10741     }
10743   fesetround (save_round_mode);
10745   END (logb_downward);
10748 static void
10749 lround_test (void)
10751   /* TODO: missing +/-Inf as well as qNaN tests.  */
10753   START (lround);
10755   TEST_f_l (lround, 0, 0);
10756   TEST_f_l (lround, minus_zero, 0);
10757   TEST_f_l (lround, 0.2L, 0.0);
10758   TEST_f_l (lround, -0.2L, 0);
10759   TEST_f_l (lround, 0.5, 1);
10760   TEST_f_l (lround, -0.5, -1);
10761   TEST_f_l (lround, 0.8L, 1);
10762   TEST_f_l (lround, -0.8L, -1);
10763   TEST_f_l (lround, 1.5, 2);
10764   TEST_f_l (lround, -1.5, -2);
10765   TEST_f_l (lround, 22514.5, 22515);
10766   TEST_f_l (lround, -22514.5, -22515);
10767   TEST_f_l (lround, 1071930.0008, 1071930);
10768 #ifndef TEST_FLOAT
10769   TEST_f_l (lround, 1073741824.01, 1073741824);
10770 # if LONG_MAX > 281474976710656
10771   TEST_f_l (lround, 281474976710656.025, 281474976710656);
10772   TEST_f_l (lround, 18014398509481974, 18014398509481974);
10773 # endif
10774   TEST_f_l (lround, 2097152.5, 2097153);
10775   TEST_f_l (lround, -2097152.5, -2097153);
10776   /* nextafter(0.5,-1)  */
10777   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
10778   /* nextafter(-0.5,1)  */
10779   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
10780 #else
10781   /* nextafter(0.5,-1)  */
10782   TEST_f_l (lround, 0x1.fffffp-2, 0);
10783   /* nextafter(-0.5,1)  */
10784   TEST_f_l (lround, -0x1.fffffp-2, 0);
10785   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
10786   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
10787 #endif
10788   END (lround);
10792 static void
10793 llround_test (void)
10795   /* TODO: missing +/-Inf as well as qNaN tests.  */
10797   START (llround);
10799   TEST_f_L (llround, 0, 0);
10800   TEST_f_L (llround, minus_zero, 0);
10801   TEST_f_L (llround, 0.2L, 0.0);
10802   TEST_f_L (llround, -0.2L, 0);
10803   TEST_f_L (llround, 0.5, 1);
10804   TEST_f_L (llround, -0.5, -1);
10805   TEST_f_L (llround, 0.8L, 1);
10806   TEST_f_L (llround, -0.8L, -1);
10807   TEST_f_L (llround, 1.5, 2);
10808   TEST_f_L (llround, -1.5, -2);
10809   TEST_f_L (llround, 22514.5, 22515);
10810   TEST_f_L (llround, -22514.5, -22515);
10811   TEST_f_l (llround, 1071930.0008, 1071930);
10812 #ifndef TEST_FLOAT
10813   TEST_f_L (llround, 2097152.5, 2097153);
10814   TEST_f_L (llround, -2097152.5, -2097153);
10815   TEST_f_L (llround, 34359738368.5, 34359738369ll);
10816   TEST_f_L (llround, -34359738368.5, -34359738369ll);
10817   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
10818 #endif
10820   /* Test boundary conditions.  */
10821   /* 0x1FFFFF */
10822   TEST_f_L (llround, 2097151.0, 2097151LL);
10823   /* 0x800000 */
10824   TEST_f_L (llround, 8388608.0, 8388608LL);
10825   /* 0x1000000 */
10826   TEST_f_L (llround, 16777216.0, 16777216LL);
10827   /* 0x20000000000 */
10828   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
10829   /* 0x40000000000 */
10830   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
10831   /* 0x1000000000000 */
10832   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
10833   /* 0x10000000000000 */
10834   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
10835   /* 0x10000080000000 */
10836   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
10837   /* 0x20000000000000 */
10838   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
10839   /* 0x80000000000000 */
10840   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
10841   /* 0x100000000000000 */
10842   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
10844 #ifndef TEST_FLOAT
10845   /* 0x100000000 */
10846   TEST_f_L (llround, 4294967295.5, 4294967296LL);
10847   /* 0x200000000 */
10848   TEST_f_L (llround, 8589934591.5, 8589934592LL);
10850   /* nextafter(0.5,-1)  */
10851   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
10852   /* nextafter(-0.5,1)  */
10853   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
10854   /* On PowerPC an exponent of '52' is the largest incrementally
10855    * representable sequence of whole-numbers in the 'double' range.  We test
10856    * lround to make sure that a guard bit set during the lround operation
10857    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
10858    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
10859    * rightmost bit set.  */
10860   /* +-(2^52+1)  */
10861   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
10862   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
10863   /* +-(2^53-1): Input is the last (positive and negative) incrementally
10864    * representable whole-number in the 'double' range that might round
10865    * erroneously.  */
10866   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
10867   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
10868 #else
10869   /* nextafter(0.5,-1)  */
10870   TEST_f_L (llround, 0x1.fffffep-2, 0);
10871   /* nextafter(-0.5,1)  */
10872   TEST_f_L (llround, -0x1.fffffep-2, 0);
10873   /* As above, on PowerPC an exponent of '23' is the largest incrementally
10874    * representable sequence of whole-numbers in the 'float' range.
10875    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
10876   TEST_f_L (llround, 0x1.000002p+23,8388609);
10877   TEST_f_L (llround, -0x1.000002p+23,-8388609);
10878   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
10879   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
10880 #endif
10883 #ifdef TEST_LDOUBLE
10884   /* The input can only be represented in long double.  */
10885   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
10886   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
10887   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
10888   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
10889   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
10891 # if LDBL_MANT_DIG > 100
10892   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
10893   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
10894   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
10895   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
10896   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
10897   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
10899   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
10900   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
10901   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
10902   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
10903   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
10904   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
10905 # endif
10907   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
10908   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
10909   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
10910   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
10911   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
10913   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
10914   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
10915   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
10916   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
10917   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
10919 # if LDBL_MANT_DIG > 100
10920   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
10921   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
10922   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
10923   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
10924   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
10925   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
10927   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
10928   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
10929   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
10930   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
10931   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
10932   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
10933 # endif
10935   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
10936   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
10937   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
10938   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
10939   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
10941   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
10942   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
10943   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
10944   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
10945   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
10947   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
10948   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
10949   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
10950   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
10951   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
10953   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
10954   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
10955   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
10956   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
10957   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
10958   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
10959 #endif
10961   END (llround);
10964 static void
10965 modf_test (void)
10967   FLOAT x;
10969   START (modf);
10971   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
10972   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
10973   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
10974   TEST_fF_f1 (modf, 0, 0, 0);
10975   TEST_fF_f1 (modf, 1.5, 0.5, 1);
10976   TEST_fF_f1 (modf, 2.5, 0.5, 2);
10977   TEST_fF_f1 (modf, -2.5, -0.5, -2);
10978   TEST_fF_f1 (modf, 20, 0, 20);
10979   TEST_fF_f1 (modf, 21, 0, 21);
10980   TEST_fF_f1 (modf, 89.5, 0.5, 89);
10982   END (modf);
10986 static void
10987 nearbyint_test (void)
10989   START (nearbyint);
10991   TEST_f_f (nearbyint, 0.0, 0.0);
10992   TEST_f_f (nearbyint, minus_zero, minus_zero);
10993   TEST_f_f (nearbyint, plus_infty, plus_infty);
10994   TEST_f_f (nearbyint, minus_infty, minus_infty);
10995   TEST_f_f (nearbyint, qnan_value, qnan_value);
10997   /* Subnormal values */
10998   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
10999   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
11001   /* Default rounding mode is round to nearest.  */
11002   TEST_f_f (nearbyint, 0.5, 0.0);
11003   TEST_f_f (nearbyint, 1.5, 2.0);
11004   TEST_f_f (nearbyint, -0.5, minus_zero);
11005   TEST_f_f (nearbyint, -1.5, -2.0);
11007   TEST_f_f (nearbyint, 262144.75, 262145.0);
11008   TEST_f_f (nearbyint, 262142.75, 262143.0);
11009   TEST_f_f (nearbyint, 524286.75, 524287.0);
11010   TEST_f_f (nearbyint, 524288.75, 524289.0);
11012   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
11013   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
11014   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
11015   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
11016   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
11017   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
11018   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
11019   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
11020   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
11021   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
11022 #ifndef TEST_FLOAT
11023   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
11024   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
11025   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
11026   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
11027   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
11028   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
11029   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
11030   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
11031   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
11032   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
11033 #endif
11035   END (nearbyint);
11038 static void
11039 nextafter_test (void)
11042   START (nextafter);
11044   TEST_ff_f (nextafter, 0, 0, 0);
11045   TEST_ff_f (nextafter, minus_zero, 0, 0);
11046   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
11047   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
11049   TEST_ff_f (nextafter, 9, 9, 9);
11050   TEST_ff_f (nextafter, -9, -9, -9);
11051   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
11052   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
11054   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
11055   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
11056   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
11058   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
11059                          LDBL_MAX, DBL_MAX, FLT_MAX);
11060   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
11061   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
11063 #ifdef TEST_LDOUBLE
11064   // XXX Enable once gcc is fixed.
11065   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
11066 #endif
11068   /* XXX We need the hexadecimal FP number representation here for further
11069      tests.  */
11071   END (nextafter);
11075 static void
11076 nexttoward_test (void)
11078   START (nexttoward);
11079   TEST_ff_f (nexttoward, 0, 0, 0);
11080   TEST_ff_f (nexttoward, minus_zero, 0, 0);
11081   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
11082   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
11084   TEST_ff_f (nexttoward, 9, 9, 9);
11085   TEST_ff_f (nexttoward, -9, -9, -9);
11086   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
11087   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
11089   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
11090   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
11091   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
11093 #ifdef TEST_FLOAT
11094   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
11095   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
11096   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
11097   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
11098   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
11099   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
11100   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
11101   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
11102   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
11103   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
11104   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
11105   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
11106   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
11107 # if LDBL_MANT_DIG >= 64
11108   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
11109   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
11110   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
11111   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
11112 # endif
11113 # if LDBL_MANT_DIG >= 106
11114   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
11115   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
11116   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
11117   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
11118 # endif
11119 # if LDBL_MANT_DIG >= 113
11120   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
11121   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
11122   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
11123   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
11124 # endif
11125 #endif
11126 #ifdef TEST_DOUBLE
11127   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
11128   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
11129   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
11130   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
11131   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
11132   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
11133   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
11134   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
11135   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
11136   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
11137   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
11138   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
11139   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
11140   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
11141 # if LDBL_MANT_DIG >= 64
11142   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
11143   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
11144   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
11145   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
11146 # endif
11147 # if LDBL_MANT_DIG >= 106
11148   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
11149   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
11150   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
11151   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
11152 # endif
11153 # if LDBL_MANT_DIG >= 113
11154   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
11155   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
11156   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
11157   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
11158 # endif
11159 #endif
11161   END (nexttoward);
11165 static void
11166 pow_test (void)
11169   errno = 0;
11170   FUNC(pow) (0, 0);
11171   if (errno == ENOSYS)
11172     /* Function not implemented.  */
11173     return;
11175   START (pow);
11177   TEST_ff_f (pow, 0, 0, 1);
11178   TEST_ff_f (pow, 0, minus_zero, 1);
11179   TEST_ff_f (pow, minus_zero, 0, 1);
11180   TEST_ff_f (pow, minus_zero, minus_zero, 1);
11182   TEST_ff_f (pow, 10, 0, 1);
11183   TEST_ff_f (pow, 10, minus_zero, 1);
11184   TEST_ff_f (pow, -10, 0, 1);
11185   TEST_ff_f (pow, -10, minus_zero, 1);
11187   TEST_ff_f (pow, qnan_value, 0, 1);
11188   TEST_ff_f (pow, qnan_value, minus_zero, 1);
11191 #ifndef TEST_INLINE
11192   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
11193   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
11194   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
11195   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
11197   TEST_ff_f (pow, 0.9L, plus_infty, 0);
11198   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
11199   TEST_ff_f (pow, -0.9L, plus_infty, 0);
11200   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
11202   TEST_ff_f (pow, 1.1L, minus_infty, 0);
11203   TEST_ff_f (pow, plus_infty, minus_infty, 0);
11204   TEST_ff_f (pow, -1.1L, minus_infty, 0);
11205   TEST_ff_f (pow, minus_infty, minus_infty, 0);
11207   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
11208   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
11209   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
11210   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
11212   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
11213   TEST_ff_f (pow, plus_infty, 1, plus_infty);
11214   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
11215   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
11217   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
11218   TEST_ff_f (pow, plus_infty, -1, 0);
11219   TEST_ff_f (pow, plus_infty, -1e7L, 0);
11220   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
11222   TEST_ff_f (pow, minus_infty, 1, minus_infty);
11223   TEST_ff_f (pow, minus_infty, 11, minus_infty);
11224   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
11226   TEST_ff_f (pow, minus_infty, 2, plus_infty);
11227   TEST_ff_f (pow, minus_infty, 12, plus_infty);
11228   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
11229   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
11230   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
11231   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
11232   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
11233   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
11235   TEST_ff_f (pow, minus_infty, -1, minus_zero);
11236   TEST_ff_f (pow, minus_infty, -11, minus_zero);
11237   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
11239   TEST_ff_f (pow, minus_infty, -2, 0);
11240   TEST_ff_f (pow, minus_infty, -12, 0);
11241   TEST_ff_f (pow, minus_infty, -1002, 0);
11242   TEST_ff_f (pow, minus_infty, -0.1L, 0);
11243   TEST_ff_f (pow, minus_infty, -1.1L, 0);
11244   TEST_ff_f (pow, minus_infty, -11.1L, 0);
11245   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
11246   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
11247 #endif
11249   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
11250   TEST_ff_f (pow, 0, qnan_value, qnan_value);
11251   TEST_ff_f (pow, 1, qnan_value, 1);
11252   TEST_ff_f (pow, -1, qnan_value, qnan_value);
11253   TEST_ff_f (pow, qnan_value, 1, qnan_value);
11254   TEST_ff_f (pow, qnan_value, -1, qnan_value);
11256   /* pow (x, qNaN) == qNaN.  */
11257   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
11258   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
11259   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
11260   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
11261   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
11263   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
11264   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
11265   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
11266   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
11267   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
11268   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
11269   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
11270   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
11272   TEST_ff_f (pow, 1, plus_infty, 1);
11273   TEST_ff_f (pow, -1, plus_infty, 1);
11274   TEST_ff_f (pow, 1, minus_infty, 1);
11275   TEST_ff_f (pow, -1, minus_infty, 1);
11276   TEST_ff_f (pow, 1, 1, 1);
11277   TEST_ff_f (pow, 1, -1, 1);
11278   TEST_ff_f (pow, 1, 1.25, 1);
11279   TEST_ff_f (pow, 1, -1.25, 1);
11280   TEST_ff_f (pow, 1, 0x1p62L, 1);
11281   TEST_ff_f (pow, 1, 0x1p63L, 1);
11282   TEST_ff_f (pow, 1, 0x1p64L, 1);
11283   TEST_ff_f (pow, 1, 0x1p72L, 1);
11284   TEST_ff_f (pow, 1, min_subnorm_value, 1);
11285   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
11287   /* pow (x, +-0) == 1.  */
11288   TEST_ff_f (pow, plus_infty, 0, 1);
11289   TEST_ff_f (pow, plus_infty, minus_zero, 1);
11290   TEST_ff_f (pow, minus_infty, 0, 1);
11291   TEST_ff_f (pow, minus_infty, minus_zero, 1);
11292   TEST_ff_f (pow, 32.75L, 0, 1);
11293   TEST_ff_f (pow, 32.75L, minus_zero, 1);
11294   TEST_ff_f (pow, -32.75L, 0, 1);
11295   TEST_ff_f (pow, -32.75L, minus_zero, 1);
11296   TEST_ff_f (pow, 0x1p72L, 0, 1);
11297   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
11298   TEST_ff_f (pow, 0x1p-72L, 0, 1);
11299   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
11301   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11302   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11303   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11304   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11305   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11306   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11307   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11308   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11310   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11311   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11312   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11313 #ifndef TEST_FLOAT
11314   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11315 #endif
11316 #ifdef TEST_LDOUBLE
11317 # if LDBL_MANT_DIG >= 64
11318   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11319 # endif
11320 # if LDBL_MANT_DIG >= 106
11321   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11322 # endif
11323 # if LDBL_MANT_DIG >= 113
11324   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11325 # endif
11326 #endif
11327   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11328   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11329   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11330   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11331 #ifndef TEST_FLOAT
11332   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11333   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11334 #endif
11335 #ifdef TEST_LDOUBLE
11336 # if LDBL_MANT_DIG >= 64
11337   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11338   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11339 # endif
11340 # if LDBL_MANT_DIG >= 106
11341   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11342   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11343 # endif
11344 # if LDBL_MANT_DIG >= 113
11345   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11346   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11347 # endif
11348 #endif
11350   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11351   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11352   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11353   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11354   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11355   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11356   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11357   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11358   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11359   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11360   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11361   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11363   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
11364   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
11365   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11366   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
11368   TEST_ff_f (pow, 0, 1, 0);
11369   TEST_ff_f (pow, 0, 11, 0);
11371   TEST_ff_f (pow, minus_zero, 1, minus_zero);
11372   TEST_ff_f (pow, minus_zero, 11, minus_zero);
11374   TEST_ff_f (pow, 0, 2, 0);
11375   TEST_ff_f (pow, 0, 11.1L, 0);
11377   TEST_ff_f (pow, minus_zero, 2, 0);
11378   TEST_ff_f (pow, minus_zero, 11.1L, 0);
11379   TEST_ff_f (pow, 0, plus_infty, 0);
11380   TEST_ff_f (pow, minus_zero, plus_infty, 0);
11381   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11382   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11384 #ifndef TEST_INLINE
11385   /* pow (x, +inf) == +inf for |x| > 1.  */
11386   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
11388   /* pow (x, +inf) == +0 for |x| < 1.  */
11389   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
11391   /* pow (x, -inf) == +0 for |x| > 1.  */
11392   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
11394   /* pow (x, -inf) == +inf for |x| < 1.  */
11395   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
11396 #endif
11398   /* pow (+inf, y) == +inf for y > 0.  */
11399   TEST_ff_f (pow, plus_infty, 2, plus_infty);
11400   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
11401 #ifndef TEST_FLOAT
11402   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
11403 #endif
11404 #ifdef TEST_LDOUBLE
11405 # if LDBL_MANT_DIG >= 64
11406   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
11407 # endif
11408 # if LDBL_MANT_DIG >= 106
11409   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
11410 # endif
11411 # if LDBL_MANT_DIG >= 113
11412   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
11413 # endif
11414 #endif
11415   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
11416   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
11417   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
11419   /* pow (+inf, y) == +0 for y < 0.  */
11420   TEST_ff_f (pow, plus_infty, -1, 0.0);
11421   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
11422 #ifndef TEST_FLOAT
11423   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
11424 #endif
11425 #ifdef TEST_LDOUBLE
11426 # if LDBL_MANT_DIG >= 64
11427   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
11428 # endif
11429 # if LDBL_MANT_DIG >= 106
11430   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11431 # endif
11432 # if LDBL_MANT_DIG >= 113
11433   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11434 # endif
11435 #endif
11436   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
11437   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
11438   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
11440   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
11441   TEST_ff_f (pow, minus_infty, 27, minus_infty);
11442   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
11443   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
11444 #ifndef TEST_FLOAT
11445   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
11446   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
11447 #endif
11448 #ifdef TEST_LDOUBLE
11449 # if LDBL_MANT_DIG >= 64
11450   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
11451   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
11452 # endif
11453 # if LDBL_MANT_DIG >= 106
11454   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
11455   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
11456 # endif
11457 # if LDBL_MANT_DIG >= 113
11458   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
11459   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
11460 # endif
11461 #endif
11463   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
11464   TEST_ff_f (pow, minus_infty, 28, plus_infty);
11465   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
11466   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
11467   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
11469   /* pow (-inf, y) == -0 for y an odd integer < 0. */
11470   TEST_ff_f (pow, minus_infty, -3, minus_zero);
11471   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
11472   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
11473 #ifndef TEST_FLOAT
11474   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
11475   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
11476 #endif
11477 #ifdef TEST_LDOUBLE
11478 # if LDBL_MANT_DIG >= 64
11479   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
11480   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
11481 # endif
11482 # if LDBL_MANT_DIG >= 106
11483   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11484   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11485 # endif
11486 # if LDBL_MANT_DIG >= 113
11487   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11488   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11489 # endif
11490 #endif
11491   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
11492   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
11493   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
11494   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
11495   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
11497   /* pow (+0, y) == +0 for y an odd integer > 0.  */
11498   TEST_ff_f (pow, 0.0, 27, 0.0);
11499   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
11500 #ifndef TEST_FLOAT
11501   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
11502 #endif
11503 #ifdef TEST_LDOUBLE
11504 # if LDBL_MANT_DIG >= 64
11505   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
11506 # endif
11507 # if LDBL_MANT_DIG >= 106
11508   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11509 # endif
11510 # if LDBL_MANT_DIG >= 113
11511   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11512 # endif
11513 #endif
11515   /* pow (-0, y) == -0 for y an odd integer > 0.  */
11516   TEST_ff_f (pow, minus_zero, 27, minus_zero);
11517   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
11518   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
11519 #ifndef TEST_FLOAT
11520   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
11521   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
11522 #endif
11523 #ifdef TEST_LDOUBLE
11524 # if LDBL_MANT_DIG >= 64
11525   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
11526   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
11527 # endif
11528 # if LDBL_MANT_DIG >= 106
11529   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11530   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11531 # endif
11532 # if LDBL_MANT_DIG >= 113
11533   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11534   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11535 # endif
11536 #endif
11538   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
11539   TEST_ff_f (pow, 0.0, 4, 0.0);
11540   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
11541   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
11542   TEST_ff_f (pow, 0.0, max_value, 0.0);
11543   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
11545   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
11546   TEST_ff_f (pow, minus_zero, 4, 0.0);
11547   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
11548   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
11549   TEST_ff_f (pow, minus_zero, max_value, 0.0);
11550   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
11552   TEST_ff_f (pow, 16, 0.25L, 2);
11553   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
11554   TEST_ff_f (pow, 2, 4, 16);
11555   TEST_ff_f (pow, 256, 8, 0x1p64L);
11557   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
11559 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
11560   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
11561 #endif
11563   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
11564   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
11565 #ifndef TEST_FLOAT
11566   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
11567   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
11568 #endif
11569 #ifdef TEST_LDOUBLE
11570 # if LDBL_MANT_DIG >= 64
11571   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
11572   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
11573 # endif
11574 # if LDBL_MANT_DIG >= 106
11575   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11576   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11577 # endif
11578 # if LDBL_MANT_DIG >= 113
11579   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11580   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11581 # endif
11582 #endif
11583   TEST_ff_f (pow, -1.0, -max_value, 1.0);
11585   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
11586   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
11587 #ifndef TEST_FLOAT
11588   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
11589   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
11590 #endif
11591 #ifdef TEST_LDOUBLE
11592 # if LDBL_MANT_DIG >= 64
11593   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
11594   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
11595 # endif
11596 # if LDBL_MANT_DIG >= 106
11597   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11598   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11599 # endif
11600 # if LDBL_MANT_DIG >= 113
11601   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11602   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11603 # endif
11604 #endif
11605   TEST_ff_f (pow, -1.0, max_value, 1.0);
11607   TEST_ff_f (pow, -2.0, 126, 0x1p126);
11608   TEST_ff_f (pow, -2.0, 127, -0x1p127);
11609   /* Allow inexact results for float to be considered to underflow.  */
11610   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
11611   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
11613   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11614   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11615 #ifndef TEST_FLOAT
11616   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11617   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11618 #endif
11619 #ifdef TEST_LDOUBLE
11620 # if LDBL_MANT_DIG >= 64
11621   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11622   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11623 # endif
11624 # if LDBL_MANT_DIG >= 106
11625   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11626   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11627 # endif
11628 # if LDBL_MANT_DIG >= 113
11629   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11630   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11631 # endif
11632 #endif
11633   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11635   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11636   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11637 #ifndef TEST_FLOAT
11638   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11639   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11640 #endif
11641 #ifdef TEST_LDOUBLE
11642 # if LDBL_MANT_DIG >= 64
11643   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11644   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11645 # endif
11646 # if LDBL_MANT_DIG >= 106
11647   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11648   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11649 # endif
11650 # if LDBL_MANT_DIG >= 113
11651   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11652   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11653 # endif
11654 #endif
11655   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
11657   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
11658   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
11659   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11660   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
11661   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
11662   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
11663   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
11665   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11666   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11667 #ifndef TEST_FLOAT
11668   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11669   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11670 #endif
11671 #ifdef TEST_LDOUBLE
11672 # if LDBL_MANT_DIG >= 64
11673   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11674   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11675 # endif
11676 # if LDBL_MANT_DIG >= 106
11677   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11678   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11679 # endif
11680 # if LDBL_MANT_DIG >= 113
11681   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11682   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11683 # endif
11684 #endif
11685   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11687   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11688   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11689 #ifndef TEST_FLOAT
11690   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11691   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11692 #endif
11693 #ifdef TEST_LDOUBLE
11694 # if LDBL_MANT_DIG >= 64
11695   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11696   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11697 # endif
11698 # if LDBL_MANT_DIG >= 106
11699   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11700   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11701 # endif
11702 # if LDBL_MANT_DIG >= 113
11703   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11704   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11705 # endif
11706 #endif
11707   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11709   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
11710   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
11711   TEST_ff_f (pow, -0.5, -126, 0x1p126);
11712   TEST_ff_f (pow, -0.5, -127, -0x1p127);
11714   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11715   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11716 #ifndef TEST_FLOAT
11717   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11718   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11719 #endif
11720 #ifdef TEST_LDOUBLE
11721 # if LDBL_MANT_DIG >= 64
11722   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11723   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11724 # endif
11725 # if LDBL_MANT_DIG >= 106
11726   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11727   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11728 # endif
11729 # if LDBL_MANT_DIG >= 113
11730   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11731   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11732 # endif
11733 #endif
11734   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11736   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11737   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11738 #ifndef TEST_FLOAT
11739   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11740   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11741 #endif
11742 #ifdef TEST_LDOUBLE
11743 # if LDBL_MANT_DIG >= 64
11744   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11745   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11746 # endif
11747 # if LDBL_MANT_DIG >= 106
11748   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11749   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11750 # endif
11751 # if LDBL_MANT_DIG >= 113
11752   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11753   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11754 # endif
11755 #endif
11756   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11758   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
11759   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
11760   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11761   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
11762   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
11763   /* Allow inexact results to be considered to underflow.  */
11764   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
11765   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
11766   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
11768   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11769   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11770 #ifndef TEST_FLOAT
11771   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11772   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11773 #endif
11774 #ifdef TEST_LDOUBLE
11775 # if LDBL_MANT_DIG >= 64
11776   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11777   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11778 # endif
11779 # if LDBL_MANT_DIG >= 106
11780   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11781   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11782 # endif
11783 # if LDBL_MANT_DIG >= 113
11784   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11785   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11786 # endif
11787 #endif
11788   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11790   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11791   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11792 #ifndef TEST_FLOAT
11793   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11794   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11795 #endif
11796 #ifdef TEST_LDOUBLE
11797 # if LDBL_MANT_DIG >= 64
11798   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11799   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11800 # endif
11801 # if LDBL_MANT_DIG >= 106
11802   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11803   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11804 # endif
11805 # if LDBL_MANT_DIG >= 113
11806   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11807   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11808 # endif
11809 #endif
11810   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11812   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
11813   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
11814   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
11815   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
11816   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
11817   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
11818   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
11819   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
11820   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
11821   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
11822   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
11823   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
11824   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
11825   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
11826   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
11828 #if !defined TEST_FLOAT
11829   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
11830   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
11831   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
11832   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
11833 #endif
11835 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
11836   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
11837   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
11838   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
11839   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
11840 #endif
11842 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
11843   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
11844   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
11845   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
11846   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
11847 #endif
11849 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11850   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
11851   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
11852   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
11853   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
11854   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
11855   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
11856   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
11857   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
11858   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
11859   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
11860   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
11861   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
11862   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
11863 #endif
11865   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
11866   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
11867   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
11868   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
11869   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
11870   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
11871   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
11872   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
11874   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
11876   END (pow);
11880 static void
11881 pow_test_tonearest (void)
11883   int save_round_mode;
11884   errno = 0;
11885   FUNC(pow) (0, 0);
11886   if (errno == ENOSYS)
11887     /* Function not implemented.  */
11888     return;
11890   START (pow_tonearest);
11892   save_round_mode = fegetround ();
11894   if (!fesetround (FE_TONEAREST))
11895     {
11896       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11897       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11898     }
11900   fesetround (save_round_mode);
11902   END (pow_tonearest);
11906 static void
11907 pow_test_towardzero (void)
11909   int save_round_mode;
11910   errno = 0;
11911   FUNC(pow) (0, 0);
11912   if (errno == ENOSYS)
11913     /* Function not implemented.  */
11914     return;
11916   START (pow_towardzero);
11918   save_round_mode = fegetround ();
11920   if (!fesetround (FE_TOWARDZERO))
11921     {
11922       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11923       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11924     }
11926   fesetround (save_round_mode);
11928   END (pow_towardzero);
11932 static void
11933 pow_test_downward (void)
11935   int save_round_mode;
11936   errno = 0;
11937   FUNC(pow) (0, 0);
11938   if (errno == ENOSYS)
11939     /* Function not implemented.  */
11940     return;
11942   START (pow_downward);
11944   save_round_mode = fegetround ();
11946   if (!fesetround (FE_DOWNWARD))
11947     {
11948       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11949       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11950     }
11952   fesetround (save_round_mode);
11954   END (pow_downward);
11958 static void
11959 pow_test_upward (void)
11961   int save_round_mode;
11962   errno = 0;
11963   FUNC(pow) (0, 0);
11964   if (errno == ENOSYS)
11965     /* Function not implemented.  */
11966     return;
11968   START (pow_upward);
11970   save_round_mode = fegetround ();
11972   if (!fesetround (FE_UPWARD))
11973     {
11974       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11975       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11976     }
11978   fesetround (save_round_mode);
11980   END (pow_upward);
11984 static void
11985 remainder_test (void)
11987   errno = 0;
11988   FUNC(remainder) (1.625, 1.0);
11989   if (errno == ENOSYS)
11990     /* Function not implemented.  */
11991     return;
11993   START (remainder);
11995   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
11996   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
11997   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
11998   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
11999   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12000   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12001   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12002   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12003   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12004   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12005   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, ERRNO_UNCHANGED);
12006   TEST_ff_f (remainder, 0, qnan_value, qnan_value, ERRNO_UNCHANGED);
12007   TEST_ff_f (remainder, qnan_value, 0, qnan_value, ERRNO_UNCHANGED);
12009   TEST_ff_f (remainder, 7.0, plus_infty, 7.0, ERRNO_UNCHANGED);
12010   TEST_ff_f (remainder, 7.0, minus_infty, 7.0, ERRNO_UNCHANGED);
12012   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
12013   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
12014   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
12015   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
12016   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
12017   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
12019   END (remainder);
12022 static void
12023 remquo_test (void)
12025   /* x is needed.  */
12026   int x;
12028   errno = 0;
12029   FUNC(remquo) (1.625, 1.0, &x);
12030   if (errno == ENOSYS)
12031     /* Function not implemented.  */
12032     return;
12034   START (remquo);
12036   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
12037   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
12038   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12039   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12040   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
12042   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
12043   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
12044   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
12045   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
12047   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
12048   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
12050   END (remquo);
12053 static void
12054 rint_test (void)
12056   /* TODO: missing qNaN tests.  */
12058   START (rint);
12060   TEST_f_f (rint, 0.0, 0.0);
12061   TEST_f_f (rint, minus_zero, minus_zero);
12062   TEST_f_f (rint, plus_infty, plus_infty);
12063   TEST_f_f (rint, minus_infty, minus_infty);
12065   /* Default rounding mode is round to even.  */
12066   TEST_f_f (rint, 0.5, 0.0);
12067   TEST_f_f (rint, 1.5, 2.0);
12068   TEST_f_f (rint, 2.5, 2.0);
12069   TEST_f_f (rint, 3.5, 4.0);
12070   TEST_f_f (rint, 4.5, 4.0);
12071   TEST_f_f (rint, -0.5, -0.0);
12072   TEST_f_f (rint, -1.5, -2.0);
12073   TEST_f_f (rint, -2.5, -2.0);
12074   TEST_f_f (rint, -3.5, -4.0);
12075   TEST_f_f (rint, -4.5, -4.0);
12076   TEST_f_f (rint, 0.1, 0.0);
12077   TEST_f_f (rint, 0.25, 0.0);
12078   TEST_f_f (rint, 0.625, 1.0);
12079   TEST_f_f (rint, -0.1, -0.0);
12080   TEST_f_f (rint, -0.25, -0.0);
12081   TEST_f_f (rint, -0.625, -1.0);
12082   TEST_f_f (rint, 262144.75, 262145.0);
12083   TEST_f_f (rint, 262142.75, 262143.0);
12084   TEST_f_f (rint, 524286.75, 524287.0);
12085   TEST_f_f (rint, 524288.75, 524289.0);
12086   TEST_f_f (rint, 1048576.75, 1048577.0);
12087   TEST_f_f (rint, 2097152.75, 2097153.0);
12088   TEST_f_f (rint, -1048576.75, -1048577.0);
12089   TEST_f_f (rint, -2097152.75, -2097153.0);
12090 #ifndef TEST_FLOAT
12091   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12092   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12093   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12094   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12095   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12096   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12097   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12098   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12099   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12100   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12101 #endif
12102 #ifdef TEST_LDOUBLE
12103   /* The result can only be represented in long double.  */
12104   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12105   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12106   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12107   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12108   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12110 # if LDBL_MANT_DIG > 100
12111   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12112   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12113   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12114 # endif
12116   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12117   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12118   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12119   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12120   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12122 # if LDBL_MANT_DIG > 100
12123   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12124   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12125   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12127   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12128   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12129   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12130   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12131   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12132   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12134   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12135   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12136   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12137   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12138   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12139   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12140 # endif
12142   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
12143   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
12144   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
12145   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
12146   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
12148   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
12149   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
12150   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
12151   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
12152   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
12154   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
12155   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
12156   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
12157   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
12158   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
12160   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
12161   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
12162   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
12163   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
12164   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
12166   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12167   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12168   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12169   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12170   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12171 #endif
12173   END (rint);
12176 static void
12177 rint_test_tonearest (void)
12179   int save_round_mode;
12180   START (rint_tonearest);
12182   save_round_mode = fegetround ();
12184   if (!fesetround (FE_TONEAREST))
12185     {
12186       TEST_f_f (rint, 2.0, 2.0);
12187       TEST_f_f (rint, 1.5, 2.0);
12188       TEST_f_f (rint, 1.0, 1.0);
12189       TEST_f_f (rint, 0.5, 0.0);
12190       TEST_f_f (rint, 0.0, 0.0);
12191       TEST_f_f (rint, minus_zero, minus_zero);
12192       TEST_f_f (rint, -0.5, -0.0);
12193       TEST_f_f (rint, -1.0, -1.0);
12194       TEST_f_f (rint, -1.5, -2.0);
12195       TEST_f_f (rint, -2.0, -2.0);
12196       TEST_f_f (rint, 0.1, 0.0);
12197       TEST_f_f (rint, 0.25, 0.0);
12198       TEST_f_f (rint, 0.625, 1.0);
12199       TEST_f_f (rint, -0.1, -0.0);
12200       TEST_f_f (rint, -0.25, -0.0);
12201       TEST_f_f (rint, -0.625, -1.0);
12202       TEST_f_f (rint, 1048576.75, 1048577.0);
12203       TEST_f_f (rint, 2097152.75, 2097153.0);
12204       TEST_f_f (rint, -1048576.75, -1048577.0);
12205       TEST_f_f (rint, -2097152.75, -2097153.0);
12206 #ifndef TEST_FLOAT
12207       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12208       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12209       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12210       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12211       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12212       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12213       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12214       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12215       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12216       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12217 #endif
12218 #ifdef TEST_LDOUBLE
12219       /* The result can only be represented in long double.  */
12220       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12221       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12222       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12223       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12224       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12225 # if LDBL_MANT_DIG > 100
12226       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12227       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12228       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12229 # endif
12230       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12231       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12232       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12233       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12234       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12235 # if LDBL_MANT_DIG > 100
12236       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12237       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12238       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12240       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12241       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12242       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12243       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12244       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12245       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12247       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12248       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12249       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12250       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12251       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12252       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12253 # endif
12254 #endif
12255     }
12257   fesetround (save_round_mode);
12259   END (rint_tonearest);
12262 static void
12263 rint_test_towardzero (void)
12265   int save_round_mode;
12266   START (rint_towardzero);
12268   save_round_mode = fegetround ();
12270   if (!fesetround (FE_TOWARDZERO))
12271     {
12272       TEST_f_f (rint, 2.0, 2.0);
12273       TEST_f_f (rint, 1.5, 1.0);
12274       TEST_f_f (rint, 1.0, 1.0);
12275       TEST_f_f (rint, 0.5, 0.0);
12276       TEST_f_f (rint, 0.0, 0.0);
12277       TEST_f_f (rint, minus_zero, minus_zero);
12278       TEST_f_f (rint, -0.5, -0.0);
12279       TEST_f_f (rint, -1.0, -1.0);
12280       TEST_f_f (rint, -1.5, -1.0);
12281       TEST_f_f (rint, -2.0, -2.0);
12282       TEST_f_f (rint, 0.1, 0.0);
12283       TEST_f_f (rint, 0.25, 0.0);
12284       TEST_f_f (rint, 0.625, 0.0);
12285       TEST_f_f (rint, -0.1, -0.0);
12286       TEST_f_f (rint, -0.25, -0.0);
12287       TEST_f_f (rint, -0.625, -0.0);
12288       TEST_f_f (rint, 1048576.75, 1048576.0);
12289       TEST_f_f (rint, 2097152.75, 2097152.0);
12290       TEST_f_f (rint, -1048576.75, -1048576.0);
12291       TEST_f_f (rint, -2097152.75, -2097152.0);
12292 #ifndef TEST_FLOAT
12293       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12294       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12295       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12296       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12297       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12298       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12299       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12300       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12301       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12302       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12303 #endif
12304 #ifdef TEST_LDOUBLE
12305       /* The result can only be represented in long double.  */
12306       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12307       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12308       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12309       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12310       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12311 # if LDBL_MANT_DIG > 100
12312       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12313       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12314       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12315 # endif
12316       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12317       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12318       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12319       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12320       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12321 # if LDBL_MANT_DIG > 100
12322       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12323       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12324       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12326       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12327       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12328       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12329       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12330       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12331       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12333       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12334       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12335       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12336       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12337       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12338       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12339 # endif
12340 #endif
12341     }
12343   fesetround (save_round_mode);
12345   END (rint_towardzero);
12348 static void
12349 rint_test_downward (void)
12351   int save_round_mode;
12352   START (rint_downward);
12354   save_round_mode = fegetround ();
12356   if (!fesetround (FE_DOWNWARD))
12357     {
12358       TEST_f_f (rint, 2.0, 2.0);
12359       TEST_f_f (rint, 1.5, 1.0);
12360       TEST_f_f (rint, 1.0, 1.0);
12361       TEST_f_f (rint, 0.5, 0.0);
12362       TEST_f_f (rint, 0.0, 0.0);
12363       TEST_f_f (rint, minus_zero, minus_zero);
12364       TEST_f_f (rint, -0.5, -1.0);
12365       TEST_f_f (rint, -1.0, -1.0);
12366       TEST_f_f (rint, -1.5, -2.0);
12367       TEST_f_f (rint, -2.0, -2.0);
12368       TEST_f_f (rint, 0.1, 0.0);
12369       TEST_f_f (rint, 0.25, 0.0);
12370       TEST_f_f (rint, 0.625, 0.0);
12371       TEST_f_f (rint, -0.1, -1.0);
12372       TEST_f_f (rint, -0.25, -1.0);
12373       TEST_f_f (rint, -0.625, -1.0);
12374       TEST_f_f (rint, 1048576.75, 1048576.0);
12375       TEST_f_f (rint, 2097152.75, 2097152.0);
12376       TEST_f_f (rint, -1048576.75, -1048577.0);
12377       TEST_f_f (rint, -2097152.75, -2097153.0);
12378 #ifndef TEST_FLOAT
12379       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12380       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12381       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12382       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12383       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12384       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12385       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12386       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12387       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12388       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12389 #endif
12390 #ifdef TEST_LDOUBLE
12391       /* The result can only be represented in long double.  */
12392       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12393       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12394       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12395       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12396       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12397 # if LDBL_MANT_DIG > 100
12398       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12399       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12400       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12401 # endif
12402       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12403       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
12404       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
12405       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12406       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12407 # if LDBL_MANT_DIG > 100
12408       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12409       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12410       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12412       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12413       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12414       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12415       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12416       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12417       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12419       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
12420       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
12421       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
12422       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12423       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12424       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12425 # endif
12426 #endif
12427     }
12429   fesetround (save_round_mode);
12431   END (rint_downward);
12434 static void
12435 rint_test_upward (void)
12437   int save_round_mode;
12438   START (rint_upward);
12440   save_round_mode = fegetround ();
12442   if (!fesetround (FE_UPWARD))
12443     {
12444       TEST_f_f (rint, 2.0, 2.0);
12445       TEST_f_f (rint, 1.5, 2.0);
12446       TEST_f_f (rint, 1.0, 1.0);
12447       TEST_f_f (rint, 0.5, 1.0);
12448       TEST_f_f (rint, 0.0, 0.0);
12449       TEST_f_f (rint, minus_zero, minus_zero);
12450       TEST_f_f (rint, -0.5, -0.0);
12451       TEST_f_f (rint, -1.0, -1.0);
12452       TEST_f_f (rint, -1.5, -1.0);
12453       TEST_f_f (rint, -2.0, -2.0);
12454       TEST_f_f (rint, 0.1, 1.0);
12455       TEST_f_f (rint, 0.25, 1.0);
12456       TEST_f_f (rint, 0.625, 1.0);
12457       TEST_f_f (rint, -0.1, -0.0);
12458       TEST_f_f (rint, -0.25, -0.0);
12459       TEST_f_f (rint, -0.625, -0.0);
12460       TEST_f_f (rint, 1048576.75, 1048577.0);
12461       TEST_f_f (rint, 2097152.75, 2097153.0);
12462       TEST_f_f (rint, -1048576.75, -1048576.0);
12463       TEST_f_f (rint, -2097152.75, -2097152.0);
12464 #ifndef TEST_FLOAT
12465       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12466       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12467       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12468       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12469       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12470       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12471       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12472       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12473       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12474       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12475 #endif
12476 #ifdef TEST_LDOUBLE
12477       /* The result can only be represented in long double.  */
12478       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12479       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
12480       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
12481       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12482       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12483 # if LDBL_MANT_DIG > 100
12484       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12485       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12486       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12487 # endif
12488       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12489       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12490       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12491       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12492       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12493 # if LDBL_MANT_DIG > 100
12494       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12495       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12496       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12498       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
12499       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
12500       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
12501       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12502       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12503       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12505       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12506       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12507       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12508       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12509       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12510       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12511 # endif
12512 #endif
12513     }
12515   fesetround (save_round_mode);
12517   END (rint_upward);
12520 static void
12521 round_test (void)
12523   /* TODO: missing +/-Inf as well as qNaN tests.  */
12525   START (round);
12527   TEST_f_f (round, 0, 0);
12528   TEST_f_f (round, minus_zero, minus_zero);
12529   TEST_f_f (round, 0.2L, 0.0);
12530   TEST_f_f (round, -0.2L, minus_zero);
12531   TEST_f_f (round, 0.5, 1.0);
12532   TEST_f_f (round, -0.5, -1.0);
12533   TEST_f_f (round, 0.8L, 1.0);
12534   TEST_f_f (round, -0.8L, -1.0);
12535   TEST_f_f (round, 1.5, 2.0);
12536   TEST_f_f (round, -1.5, -2.0);
12537   TEST_f_f (round, 0.1, 0.0);
12538   TEST_f_f (round, 0.25, 0.0);
12539   TEST_f_f (round, 0.625, 1.0);
12540   TEST_f_f (round, -0.1, -0.0);
12541   TEST_f_f (round, -0.25, -0.0);
12542   TEST_f_f (round, -0.625, -1.0);
12543   TEST_f_f (round, 2097152.5, 2097153);
12544   TEST_f_f (round, -2097152.5, -2097153);
12546 #ifdef TEST_LDOUBLE
12547   /* The result can only be represented in long double.  */
12548   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
12549   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
12550   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
12551   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
12552   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
12553 # if LDBL_MANT_DIG > 100
12554   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
12555   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
12556   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
12557 # endif
12559   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
12560   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
12561   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
12562   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
12563   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
12564 # if LDBL_MANT_DIG > 100
12565   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
12566   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
12567   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
12568 # endif
12570   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
12571   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
12572   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
12573   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
12574   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
12576   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
12577   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
12578   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
12579   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
12580   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
12582 # if LDBL_MANT_DIG > 100
12583   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
12584   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
12585   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
12586   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
12587   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
12588   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
12590   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
12591   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
12592   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
12593   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
12594   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
12595   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
12596 # endif
12598   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
12599   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
12600   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
12601   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
12602   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
12604   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
12605   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
12606   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
12607   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
12608   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
12610   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12611   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12612   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
12613   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12614   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12615 #endif
12617   END (round);
12621 static void
12622 scalb_test (void)
12625   START (scalb);
12627   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
12628   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
12630   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12631   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12633   TEST_ff_f (scalb, 1, 0, 1);
12634   TEST_ff_f (scalb, -1, 0, -1);
12636   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
12637   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
12639   TEST_ff_f (scalb, 0, 2, 0);
12640   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
12641   TEST_ff_f (scalb, 0, 0, 0);
12642   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
12643   TEST_ff_f (scalb, 0, -1, 0);
12644   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
12645   TEST_ff_f (scalb, 0, minus_infty, 0);
12646   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
12648   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
12649   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
12650   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
12651   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
12652   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
12653   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
12655   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
12656   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
12658   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
12659   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
12660   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
12661   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
12663   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12664   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12666   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
12667   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12668   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
12669   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12670   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
12671   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
12672   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
12674   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
12675   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
12677   END (scalb);
12681 static void
12682 scalbn_test (void)
12685   START (scalbn);
12687   TEST_fi_f (scalbn, 0, 0, 0);
12688   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
12690   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
12691   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
12692   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
12694   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
12695   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
12697   TEST_fi_f (scalbn, 1, 0L, 1);
12699   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12700   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12701   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12702   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12703   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12704   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12705   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12706   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12708   END (scalbn);
12712 static void
12713 scalbln_test (void)
12716   START (scalbln);
12718   TEST_fl_f (scalbln, 0, 0, 0);
12719   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
12721   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
12722   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
12723   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
12725   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
12726   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
12728   TEST_fl_f (scalbln, 1, 0L, 1);
12730   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12731   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12732   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12733   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12734   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12735   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12736   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12737   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12739   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12740   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12741   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12742   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12743   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12744   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12745   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12746   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12748 #if LONG_MAX >= 0x100000000
12749   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12750   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12751   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12752   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12753   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12754   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12755   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12756   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12757 #endif
12759   END (scalbn);
12763 static void
12764 signbit_test (void)
12766   /* TODO: missing qNaN tests.  */
12768   START (signbit);
12770   TEST_f_b (signbit, 0, 0);
12771   TEST_f_b (signbit, minus_zero, 1);
12772   TEST_f_b (signbit, plus_infty, 0);
12773   TEST_f_b (signbit, minus_infty, 1);
12775   /* signbit (x) != 0 for x < 0.  */
12776   TEST_f_b (signbit, -1, 1);
12777   /* signbit (x) == 0 for x >= 0.  */
12778   TEST_f_b (signbit, 1, 0);
12780   END (signbit);
12784 static void
12785 sin_test (void)
12787   errno = 0;
12788   FUNC(sin) (0);
12789   if (errno == ENOSYS)
12790     /* Function not implemented.  */
12791     return;
12793   START (sin);
12795   TEST_f_f (sin, 0, 0);
12796   TEST_f_f (sin, minus_zero, minus_zero);
12797   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12798   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12799   TEST_f_f (sin, qnan_value, qnan_value, ERRNO_UNCHANGED);
12801   TEST_f_f (sin, M_PI_6l, 0.5);
12802   TEST_f_f (sin, -M_PI_6l, -0.5);
12803   TEST_f_f (sin, M_PI_2l, 1);
12804   TEST_f_f (sin, -M_PI_2l, -1);
12805   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
12807   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
12808   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
12810   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
12812 #ifdef TEST_DOUBLE
12813   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
12814   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
12815 #endif
12817 #ifndef TEST_FLOAT
12818   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
12819   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
12820 #endif
12822 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12823   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
12824 #endif
12826   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
12827   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
12828   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
12829   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
12830   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
12831   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
12833   END (sin);
12838 static void
12839 sin_test_tonearest (void)
12841   int save_round_mode;
12842   errno = 0;
12843   FUNC(sin) (0);
12844   if (errno == ENOSYS)
12845     /* Function not implemented.  */
12846     return;
12848   START (sin_tonearest);
12850   save_round_mode = fegetround ();
12852   if (!fesetround (FE_TONEAREST))
12853     {
12854       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12855       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12856       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12857       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12858       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12859       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12860       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12861       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12862       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12863       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12864     }
12866   fesetround (save_round_mode);
12868   END (sin_tonearest);
12872 static void
12873 sin_test_towardzero (void)
12875   int save_round_mode;
12876   errno = 0;
12877   FUNC(sin) (0);
12878   if (errno == ENOSYS)
12879     /* Function not implemented.  */
12880     return;
12882   START (sin_towardzero);
12884   save_round_mode = fegetround ();
12886   if (!fesetround (FE_TOWARDZERO))
12887     {
12888       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12889       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12890       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12891       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12892       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12893       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12894       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12895       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12896       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12897       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12898     }
12900   fesetround (save_round_mode);
12902   END (sin_towardzero);
12906 static void
12907 sin_test_downward (void)
12909   int save_round_mode;
12910   errno = 0;
12911   FUNC(sin) (0);
12912   if (errno == ENOSYS)
12913     /* Function not implemented.  */
12914     return;
12916   START (sin_downward);
12918   save_round_mode = fegetround ();
12920   if (!fesetround (FE_DOWNWARD))
12921     {
12922       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12923       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12924       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12925       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12926       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12927       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12928       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12929       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12930       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12931       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12932     }
12934   fesetround (save_round_mode);
12936   END (sin_downward);
12940 static void
12941 sin_test_upward (void)
12943   int save_round_mode;
12944   errno = 0;
12945   FUNC(sin) (0);
12946   if (errno == ENOSYS)
12947     /* Function not implemented.  */
12948     return;
12950   START (sin_upward);
12952   save_round_mode = fegetround ();
12954   if (!fesetround (FE_UPWARD))
12955     {
12956       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12957       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12958       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12959       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12960       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12961       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12962       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12963       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12964       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12965       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12966     }
12968   fesetround (save_round_mode);
12970   END (sin_upward);
12974 static void
12975 sincos_test (void)
12977   FLOAT sin_res, cos_res;
12979   errno = 0;
12980   FUNC(sincos) (0, &sin_res, &cos_res);
12981   if (errno == ENOSYS)
12982     /* Function not implemented.  */
12983     return;
12985   START (sincos);
12987   /* sincos is treated differently because it returns void.  */
12988   TEST_extra (sincos, 0, 0, 1);
12990   TEST_extra (sincos, minus_zero, minus_zero, 1);
12991   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12992   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12993   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
12995   /* The value of M_PI_2l is never exactly PI/2, and therefore the
12996      answer is never exactly zero. The answer is equal to the error
12997      in rounding PI/2 for the type used.  Thus the answer is unique
12998      to each type.  */
12999 #ifdef TEST_FLOAT
13000   /* 32-bit float.  */
13001   TEST_extra (sincos, M_PI_2l, 1, -0x1.777a5cp-25L);
13002 #endif
13003 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
13004   /* 64-bit double or 64-bit long double.  */
13005   TEST_extra (sincos, M_PI_2l, 1, 0x1.1a62633145c07p-54L);
13006 #endif
13007 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
13008   /* 96-bit long double.  */
13009   TEST_extra (sincos, M_PI_2l, 1, -0xe.ce675d1fc8f8cbbp-69L);
13010 #endif
13011 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
13012   /* 128-bit IBM long double.  */
13013   TEST_extra (sincos, M_PI_2l, 1, 0x1.c1cd129024e088a67cc74020bcp-107L);
13014 #endif
13015 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
13016   /* 128-bit long double.  */
13017   TEST_extra (sincos, M_PI_2l, 1, 0x1.cd129024e088a67cc74020bbea64p-115L);
13018 #endif
13020   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
13021   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
13022   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
13024   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13025   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13027 #ifdef TEST_DOUBLE
13028   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
13029 #endif
13031 #ifndef TEST_FLOAT
13032   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
13033   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
13034 #endif
13036 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13037   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
13038 #endif
13040   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
13041   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
13042   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
13043   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
13044   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
13045   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
13047   END (sincos);
13050 static void
13051 sinh_test (void)
13053   errno = 0;
13054   FUNC(sinh) (0.7L);
13055   if (errno == ENOSYS)
13056     /* Function not implemented.  */
13057     return;
13059   START (sinh);
13060   TEST_f_f (sinh, 0, 0);
13061   TEST_f_f (sinh, minus_zero, minus_zero);
13063 #ifndef TEST_INLINE
13064   TEST_f_f (sinh, plus_infty, plus_infty);
13065   TEST_f_f (sinh, minus_infty, minus_infty);
13066 #endif
13067   TEST_f_f (sinh, qnan_value, qnan_value);
13069   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
13070   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
13072   END (sinh);
13076 static void
13077 sinh_test_tonearest (void)
13079   int save_round_mode;
13080   errno = 0;
13081   FUNC(sinh) (0);
13082   if (errno == ENOSYS)
13083     /* Function not implemented.  */
13084     return;
13086   START (sinh_tonearest);
13088   save_round_mode = fegetround ();
13090   if (!fesetround (FE_TONEAREST))
13091     {
13092       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13093       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13094       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13095     }
13097   fesetround (save_round_mode);
13099   END (sinh_tonearest);
13103 static void
13104 sinh_test_towardzero (void)
13106   int save_round_mode;
13107   errno = 0;
13108   FUNC(sinh) (0);
13109   if (errno == ENOSYS)
13110     /* Function not implemented.  */
13111     return;
13113   START (sinh_towardzero);
13115   save_round_mode = fegetround ();
13117   if (!fesetround (FE_TOWARDZERO))
13118     {
13119       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13120       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13121       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13122     }
13124   fesetround (save_round_mode);
13126   END (sinh_towardzero);
13130 static void
13131 sinh_test_downward (void)
13133   int save_round_mode;
13134   errno = 0;
13135   FUNC(sinh) (0);
13136   if (errno == ENOSYS)
13137     /* Function not implemented.  */
13138     return;
13140   START (sinh_downward);
13142   save_round_mode = fegetround ();
13144   if (!fesetround (FE_DOWNWARD))
13145     {
13146       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13147       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13148       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13149     }
13151   fesetround (save_round_mode);
13153   END (sinh_downward);
13157 static void
13158 sinh_test_upward (void)
13160   int save_round_mode;
13161   errno = 0;
13162   FUNC(sinh) (0);
13163   if (errno == ENOSYS)
13164     /* Function not implemented.  */
13165     return;
13167   START (sinh_upward);
13169   save_round_mode = fegetround ();
13171   if (!fesetround (FE_UPWARD))
13172     {
13173       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13174       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13175       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13176     }
13178   fesetround (save_round_mode);
13180   END (sinh_upward);
13184 static void
13185 sqrt_test (void)
13187   errno = 0;
13188   FUNC(sqrt) (1);
13189   if (errno == ENOSYS)
13190     /* Function not implemented.  */
13191     return;
13193   START (sqrt);
13195   TEST_f_f (sqrt, 0, 0);
13196   TEST_f_f (sqrt, qnan_value, qnan_value);
13197   TEST_f_f (sqrt, plus_infty, plus_infty);
13199   TEST_f_f (sqrt, minus_zero, minus_zero);
13201   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
13202   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
13203   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
13204   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
13206   TEST_f_f (sqrt, 2209, 47);
13207   TEST_f_f (sqrt, 4, 2);
13208   TEST_f_f (sqrt, 2, M_SQRT2l);
13209   TEST_f_f (sqrt, 0.25, 0.5);
13210   TEST_f_f (sqrt, 6642.25, 81.5);
13211   TEST_f_f (sqrt, 15190.5625L, 123.25L);
13212   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
13214   END (sqrt);
13218 static void
13219 tan_test (void)
13221   errno = 0;
13222   FUNC(tan) (0);
13223   if (errno == ENOSYS)
13224     /* Function not implemented.  */
13225     return;
13227   START (tan);
13229   TEST_f_f (tan, 0, 0);
13230   TEST_f_f (tan, minus_zero, minus_zero);
13231   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13232   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13233   TEST_f_f (tan, qnan_value, qnan_value, ERRNO_UNCHANGED);
13235   TEST_f_f (tan, M_PI_4l, 1);
13236   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
13238   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
13239   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
13241   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
13242   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
13243   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
13244   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
13245   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
13246   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
13247   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
13248   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
13249   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
13250   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
13251   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
13252   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
13253   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
13254   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
13255   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
13256   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
13257   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
13258   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
13260   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
13261   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
13262   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
13263   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
13264   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
13265   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
13266   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
13267   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
13268   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
13269   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
13270   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
13271   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
13272   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
13273   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
13274   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
13275   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
13276   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
13277   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
13279 #ifndef TEST_FLOAT
13280   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
13281   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
13282 #endif
13284 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13285   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
13286 #endif
13288   END (tan);
13292 static void
13293 tan_test_tonearest (void)
13295   int save_round_mode;
13296   errno = 0;
13297   FUNC(tan) (0);
13298   if (errno == ENOSYS)
13299     /* Function not implemented.  */
13300     return;
13302   START (tan_tonearest);
13304   save_round_mode = fegetround ();
13306   if (!fesetround (FE_TONEAREST))
13307     {
13308       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13309       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13310       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13311       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13312       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13313       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13314       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13315       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13316       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13317       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13318     }
13320   fesetround (save_round_mode);
13322   END (tan_tonearest);
13326 static void
13327 tan_test_towardzero (void)
13329   int save_round_mode;
13330   errno = 0;
13331   FUNC(tan) (0);
13332   if (errno == ENOSYS)
13333     /* Function not implemented.  */
13334     return;
13336   START (tan_towardzero);
13338   save_round_mode = fegetround ();
13340   if (!fesetround (FE_TOWARDZERO))
13341     {
13342       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13343       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13344       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13345       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13346       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13347       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13348       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13349       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13350       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13351       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13352     }
13354   fesetround (save_round_mode);
13356   END (tan_towardzero);
13360 static void
13361 tan_test_downward (void)
13363   int save_round_mode;
13364   errno = 0;
13365   FUNC(tan) (0);
13366   if (errno == ENOSYS)
13367     /* Function not implemented.  */
13368     return;
13370   START (tan_downward);
13372   save_round_mode = fegetround ();
13374   if (!fesetround (FE_DOWNWARD))
13375     {
13376       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13377       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13378       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13379       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13380       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13381       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13382       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13383       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13384       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13385       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13386     }
13388   fesetround (save_round_mode);
13390   END (tan_downward);
13394 static void
13395 tan_test_upward (void)
13397   int save_round_mode;
13398   errno = 0;
13399   FUNC(tan) (0);
13400   if (errno == ENOSYS)
13401     /* Function not implemented.  */
13402     return;
13404   START (tan_upward);
13406   save_round_mode = fegetround ();
13408   if (!fesetround (FE_UPWARD))
13409     {
13410       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13411       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13412       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13413       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13414       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13415       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13416       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13417       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13418       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13419       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13420     }
13422   fesetround (save_round_mode);
13424   END (tan_upward);
13428 static void
13429 tanh_test (void)
13431   errno = 0;
13432   FUNC(tanh) (0.7L);
13433   if (errno == ENOSYS)
13434     /* Function not implemented.  */
13435     return;
13437   START (tanh);
13439   TEST_f_f (tanh, 0, 0);
13440   TEST_f_f (tanh, minus_zero, minus_zero);
13442 #ifndef TEST_INLINE
13443   TEST_f_f (tanh, plus_infty, 1);
13444   TEST_f_f (tanh, minus_infty, -1);
13445 #endif
13446   TEST_f_f (tanh, qnan_value, qnan_value);
13448   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
13449   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
13451   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
13452   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
13454   /* 2^-57  */
13455   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
13457   END (tanh);
13460 static void
13461 tgamma_test (void)
13463   errno = 0;
13464   FUNC(tgamma) (1);
13465   if (errno == ENOSYS)
13466     /* Function not implemented.  */
13467     return;
13469   START (tgamma);
13471   TEST_f_f (tgamma, plus_infty, plus_infty);
13472   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
13473   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13474   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13475   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
13476   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
13477   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
13478   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
13479   TEST_f_f (tgamma, qnan_value, qnan_value);
13481   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
13482   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
13484   TEST_f_f (tgamma, 1, 1);
13485   TEST_f_f (tgamma, 4, 6);
13487   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
13488   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
13490   END (tgamma);
13494 static void
13495 trunc_test (void)
13497   START (trunc);
13499   TEST_f_f (trunc, plus_infty, plus_infty);
13500   TEST_f_f (trunc, minus_infty, minus_infty);
13501   TEST_f_f (trunc, qnan_value, qnan_value);
13503   TEST_f_f (trunc, 0, 0);
13504   TEST_f_f (trunc, minus_zero, minus_zero);
13505   TEST_f_f (trunc, 0.1, 0);
13506   TEST_f_f (trunc, 0.25, 0);
13507   TEST_f_f (trunc, 0.625, 0);
13508   TEST_f_f (trunc, -0.1, minus_zero);
13509   TEST_f_f (trunc, -0.25, minus_zero);
13510   TEST_f_f (trunc, -0.625, minus_zero);
13511   TEST_f_f (trunc, 1, 1);
13512   TEST_f_f (trunc, -1, -1);
13513   TEST_f_f (trunc, 1.625, 1);
13514   TEST_f_f (trunc, -1.625, -1);
13516   TEST_f_f (trunc, 1048580.625L, 1048580L);
13517   TEST_f_f (trunc, -1048580.625L, -1048580L);
13519   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
13520   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
13522   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
13523   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
13525 #ifdef TEST_LDOUBLE
13526   /* The result can only be represented in long double.  */
13527   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
13528   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
13529   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
13530   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
13531   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
13533 # if LDBL_MANT_DIG > 100
13534   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
13535   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
13536   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
13537 # endif
13539   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
13540   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
13541   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
13542   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
13543   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
13545 # if LDBL_MANT_DIG > 100
13546   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
13547   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
13548   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
13549 # endif
13551   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
13552   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
13553   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
13554   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
13555   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
13557 # if LDBL_MANT_DIG > 100
13558   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
13559   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
13560   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
13561   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
13562   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
13563   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
13564 # endif
13566   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
13567   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
13568   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
13569   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
13570   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
13572 # if LDBL_MANT_DIG > 100
13573   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
13574   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
13575   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
13576   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
13577   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
13578   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
13579 # endif
13581   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
13582   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
13583   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
13584   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
13585   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
13587   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
13588   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
13589   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
13590   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
13591   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
13593   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
13594   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
13595   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
13596   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
13597   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
13598 #endif
13600   END (trunc);
13603 static void
13604 y0_test (void)
13606   FLOAT s, c;
13607   errno = 0;
13608   FUNC (sincos) (0, &s, &c);
13609   if (errno == ENOSYS)
13610     /* Required function not implemented.  */
13611     return;
13612   FUNC(y0) (1);
13613   if (errno == ENOSYS)
13614     /* Function not implemented.  */
13615     return;
13617   /* y0 is the Bessel function of the second kind of order 0 */
13618   START (y0);
13620   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
13621   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
13622   TEST_f_f (y0, 0.0, minus_infty);
13623   TEST_f_f (y0, qnan_value, qnan_value);
13624   TEST_f_f (y0, plus_infty, 0);
13626   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
13627   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
13628   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
13629   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
13630   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
13631   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
13632   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
13634   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
13636 #ifndef TEST_FLOAT
13637   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
13638   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
13639 #endif
13641 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13642   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
13643   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
13644 #endif
13646   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
13647   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
13648   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
13649   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
13650   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
13651   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
13652   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
13653   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
13654   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
13655   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
13656   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
13658   END (y0);
13662 static void
13663 y1_test (void)
13665   FLOAT s, c;
13666   errno = 0;
13667   FUNC (sincos) (0, &s, &c);
13668   if (errno == ENOSYS)
13669     /* Required function not implemented.  */
13670     return;
13671   FUNC(y1) (1);
13672   if (errno == ENOSYS)
13673     /* Function not implemented.  */
13674     return;
13676   /* y1 is the Bessel function of the second kind of order 1 */
13677   START (y1);
13679   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
13680   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
13681   TEST_f_f (y1, 0.0, minus_infty);
13682   TEST_f_f (y1, plus_infty, 0);
13683   TEST_f_f (y1, qnan_value, qnan_value);
13685   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
13686   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
13687   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
13688   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
13689   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
13690   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
13691   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
13693   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
13695 #ifndef TEST_FLOAT
13696   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
13697   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
13698 #endif
13700 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13701   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
13702   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
13703 #endif
13705   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
13706   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
13707   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
13708   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
13709   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
13710   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
13711   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
13712   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
13713   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
13714   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
13715   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
13717   END (y1);
13721 static void
13722 yn_test (void)
13724   FLOAT s, c;
13725   errno = 0;
13726   FUNC (sincos) (0, &s, &c);
13727   if (errno == ENOSYS)
13728     /* Required function not implemented.  */
13729     return;
13730   FUNC(yn) (1, 1);
13731   if (errno == ENOSYS)
13732     /* Function not implemented.  */
13733     return;
13735   /* yn is the Bessel function of the second kind of order n */
13736   START (yn);
13738   /* yn (0, x) == y0 (x)  */
13739   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
13740   TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
13741   TEST_ff_f (yn, 0, 0.0, minus_infty);
13742   TEST_ff_f (yn, 0, qnan_value, qnan_value);
13743   TEST_ff_f (yn, 0, plus_infty, 0);
13745   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
13746   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
13747   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
13748   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
13749   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
13750   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
13751   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
13753   /* yn (1, x) == y1 (x)  */
13754   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
13755   TEST_ff_f (yn, 1, 0.0, minus_infty);
13756   TEST_ff_f (yn, 1, plus_infty, 0);
13757   TEST_ff_f (yn, 1, qnan_value, qnan_value);
13759   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
13760   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
13761   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
13762   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
13763   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
13764   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
13765   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
13767   /* yn (3, x)  */
13768   TEST_ff_f (yn, 3, plus_infty, 0);
13769   TEST_ff_f (yn, 3, qnan_value, qnan_value);
13771   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
13772   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
13773   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
13774   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
13775   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
13777   /* yn (10, x)  */
13778   TEST_ff_f (yn, 10, plus_infty, 0);
13779   TEST_ff_f (yn, 10, qnan_value, qnan_value);
13781   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
13782   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
13783   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
13784   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
13785   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
13787   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
13788      and FLT_MIN.  See Bug 14173.  */
13789   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
13791   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
13793   END (yn);
13797 static void
13798 significand_test (void)
13800   /* significand returns the mantissa of the exponential representation.  */
13802   /* TODO: missing +/-Inf as well as qNaN tests.  */
13804   START (significand);
13806   TEST_f_f (significand, 4.0, 1.0);
13807   TEST_f_f (significand, 6.0, 1.5);
13808   TEST_f_f (significand, 8.0, 1.0);
13810   END (significand);
13814 static void
13815 initialize (void)
13817   fpstack_test ("start *init*");
13819   /* Clear all exceptions.  From now on we must not get random exceptions.  */
13820   feclearexcept (FE_ALL_EXCEPT);
13821   errno = 0;
13823   /* Test to make sure we start correctly.  */
13824   fpstack_test ("end *init*");
13827 /* Definitions of arguments for argp functions.  */
13828 static const struct argp_option options[] =
13830   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
13831   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
13832   { "no-max-error", 'f', NULL, 0,
13833     "Don't output maximal errors of functions"},
13834   { "no-points", 'p', NULL, 0,
13835     "Don't output results of functions invocations"},
13836   { "ignore-max-ulp", 'i', "yes/no", 0,
13837     "Ignore given maximal errors"},
13838   { "output-dir", 'o', "DIR", 0,
13839     "Directory where generated files will be placed"},
13840   { NULL, 0, NULL, 0, NULL }
13843 /* Short description of program.  */
13844 static const char doc[] = "Math test suite: " TEST_MSG ;
13846 /* Prototype for option handler.  */
13847 static error_t parse_opt (int key, char *arg, struct argp_state *state);
13849 /* Data structure to communicate with argp functions.  */
13850 static struct argp argp =
13852   options, parse_opt, NULL, doc,
13856 /* Handle program arguments.  */
13857 static error_t
13858 parse_opt (int key, char *arg, struct argp_state *state)
13860   switch (key)
13861     {
13862     case 'f':
13863       output_max_error = 0;
13864       break;
13865     case 'i':
13866       if (strcmp (arg, "yes") == 0)
13867         ignore_max_ulp = 1;
13868       else if (strcmp (arg, "no") == 0)
13869         ignore_max_ulp = 0;
13870       break;
13871     case 'o':
13872       output_dir = (char *) malloc (strlen (arg) + 1);
13873       if (output_dir != NULL)
13874         strcpy (output_dir, arg);
13875       else
13876         return errno;
13877       break;
13878     case 'p':
13879       output_points = 0;
13880       break;
13881     case 'u':
13882       output_ulps = 1;
13883       break;
13884     case 'v':
13885       if (optarg)
13886         verbose = (unsigned int) strtoul (optarg, NULL, 0);
13887       else
13888         verbose = 3;
13889       break;
13890     default:
13891       return ARGP_ERR_UNKNOWN;
13892     }
13893   return 0;
13896 #if 0
13897 /* function to check our ulp calculation.  */
13898 void
13899 check_ulp (void)
13901   int i;
13903   FLOAT u, diff, ulp;
13904   /* This gives one ulp.  */
13905   u = FUNC(nextafter) (10, 20);
13906   check_equal (10.0, u, 1, &diff, &ulp);
13907   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
13909   /* This gives one more ulp.  */
13910   u = FUNC(nextafter) (u, 20);
13911   check_equal (10.0, u, 2, &diff, &ulp);
13912   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
13914   /* And now calculate 100 ulp.  */
13915   for (i = 2; i < 100; i++)
13916     u = FUNC(nextafter) (u, 20);
13917   check_equal (10.0, u, 100, &diff, &ulp);
13918   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
13920 #endif
13923 main (int argc, char **argv)
13926   int remaining;
13927   char *ulps_file_path;
13928   size_t dir_len = 0;
13930   verbose = 1;
13931   output_ulps = 0;
13932   output_max_error = 1;
13933   output_points = 1;
13934   output_dir = NULL;
13935   /* XXX set to 0 for releases.  */
13936   ignore_max_ulp = 0;
13938   /* Parse and process arguments.  */
13939   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
13941   if (remaining != argc)
13942     {
13943       fprintf (stderr, "wrong number of arguments");
13944       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
13945       exit (EXIT_FAILURE);
13946     }
13948   if (output_ulps)
13949     {
13950       if (output_dir != NULL)
13951         dir_len = strlen (output_dir);
13952       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
13953       if (ulps_file_path == NULL)
13954         {
13955           perror ("can't allocate path for `ULPs' file: ");
13956           exit (1);
13957         }
13958       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
13959       ulps_file = fopen (ulps_file_path, "a");
13960       if (ulps_file == NULL)
13961         {
13962           perror ("can't open file `ULPs' for writing: ");
13963           exit (1);
13964         }
13965     }
13968   initialize ();
13969   printf (TEST_MSG);
13971 #if 0
13972   check_ulp ();
13973 #endif
13975   /* Keep the tests a wee bit ordered (according to ISO C99).  */
13976   /* Classification macros:  */
13977   finite_test ();
13978   fpclassify_test ();
13979   isfinite_test ();
13980   isinf_test ();
13981   isnan_test ();
13982   isnormal_test ();
13983   issignaling_test ();
13984   signbit_test ();
13986   /* Trigonometric functions:  */
13987   acos_test ();
13988   acos_test_tonearest ();
13989   acos_test_towardzero ();
13990   acos_test_downward ();
13991   acos_test_upward ();
13992   asin_test ();
13993   asin_test_tonearest ();
13994   asin_test_towardzero ();
13995   asin_test_downward ();
13996   asin_test_upward ();
13997   atan_test ();
13998   atan2_test ();
13999   cos_test ();
14000   cos_test_tonearest ();
14001   cos_test_towardzero ();
14002   cos_test_downward ();
14003   cos_test_upward ();
14004   sin_test ();
14005   sin_test_tonearest ();
14006   sin_test_towardzero ();
14007   sin_test_downward ();
14008   sin_test_upward ();
14009   sincos_test ();
14010   tan_test ();
14011   tan_test_tonearest ();
14012   tan_test_towardzero ();
14013   tan_test_downward ();
14014   tan_test_upward ();
14016   /* Hyperbolic functions:  */
14017   acosh_test ();
14018   asinh_test ();
14019   atanh_test ();
14020   cosh_test ();
14021   cosh_test_tonearest ();
14022   cosh_test_towardzero ();
14023   cosh_test_downward ();
14024   cosh_test_upward ();
14025   sinh_test ();
14026   sinh_test_tonearest ();
14027   sinh_test_towardzero ();
14028   sinh_test_downward ();
14029   sinh_test_upward ();
14030   tanh_test ();
14032   /* Exponential and logarithmic functions:  */
14033   exp_test ();
14034   exp_test_tonearest ();
14035   exp_test_towardzero ();
14036   exp_test_downward ();
14037   exp_test_upward ();
14038   exp10_test ();
14039   exp2_test ();
14040   expm1_test ();
14041   frexp_test ();
14042   ldexp_test ();
14043   log_test ();
14044   log10_test ();
14045   log1p_test ();
14046   log2_test ();
14047   logb_test ();
14048   logb_test_downward ();
14049   modf_test ();
14050   ilogb_test ();
14051   scalb_test ();
14052   scalbn_test ();
14053   scalbln_test ();
14054   significand_test ();
14056   /* Power and absolute value functions:  */
14057   cbrt_test ();
14058   fabs_test ();
14059   hypot_test ();
14060   pow_test ();
14061   pow_test_tonearest ();
14062   pow_test_towardzero ();
14063   pow_test_downward ();
14064   pow_test_upward ();
14065   sqrt_test ();
14067   /* Error and gamma functions:  */
14068   erf_test ();
14069   erfc_test ();
14070   gamma_test ();
14071   lgamma_test ();
14072   tgamma_test ();
14074   /* Nearest integer functions:  */
14075   ceil_test ();
14076   floor_test ();
14077   nearbyint_test ();
14078   rint_test ();
14079   rint_test_tonearest ();
14080   rint_test_towardzero ();
14081   rint_test_downward ();
14082   rint_test_upward ();
14083   lrint_test ();
14084   lrint_test_tonearest ();
14085   lrint_test_towardzero ();
14086   lrint_test_downward ();
14087   lrint_test_upward ();
14088   llrint_test ();
14089   llrint_test_tonearest ();
14090   llrint_test_towardzero ();
14091   llrint_test_downward ();
14092   llrint_test_upward ();
14093   round_test ();
14094   lround_test ();
14095   llround_test ();
14096   trunc_test ();
14098   /* Remainder functions:  */
14099   fmod_test ();
14100   remainder_test ();
14101   remquo_test ();
14103   /* Manipulation functions:  */
14104   copysign_test ();
14105   nextafter_test ();
14106   nexttoward_test ();
14108   /* maximum, minimum and positive difference functions */
14109   fdim_test ();
14110   fmax_test ();
14111   fmin_test ();
14113   /* Multiply and add:  */
14114   fma_test ();
14115   fma_test_towardzero ();
14116   fma_test_downward ();
14117   fma_test_upward ();
14119   /* Comparison macros:  */
14120   isgreater_test ();
14121   isgreaterequal_test ();
14122   isless_test ();
14123   islessequal_test ();
14124   islessgreater_test ();
14125   isunordered_test ();
14127   /* Complex functions:  */
14128   cabs_test ();
14129   cacos_test ();
14130   cacosh_test ();
14131   carg_test ();
14132   casin_test ();
14133   casinh_test ();
14134   catan_test ();
14135   catanh_test ();
14136   ccos_test ();
14137   ccosh_test ();
14138   cexp_test ();
14139   cimag_test ();
14140   clog10_test ();
14141   clog_test ();
14142   conj_test ();
14143   cpow_test ();
14144   cproj_test ();
14145   creal_test ();
14146   csin_test ();
14147   csinh_test ();
14148   csqrt_test ();
14149   ctan_test ();
14150   ctan_test_tonearest ();
14151   ctan_test_towardzero ();
14152   ctan_test_downward ();
14153   ctan_test_upward ();
14154   ctanh_test ();
14155   ctanh_test_tonearest ();
14156   ctanh_test_towardzero ();
14157   ctanh_test_downward ();
14158   ctanh_test_upward ();
14160   /* Bessel functions:  */
14161   j0_test ();
14162   j1_test ();
14163   jn_test ();
14164   y0_test ();
14165   y1_test ();
14166   yn_test ();
14168   if (output_ulps)
14169     fclose (ulps_file);
14171   printf ("\nTest suite completed:\n");
14172   printf ("  %d test cases plus %d tests for exception flags and\n"
14173           "    %d tests for errno executed.\n",
14174           noTests, noExcTests, noErrnoTests);
14175   if (noErrors)
14176     {
14177       printf ("  %d errors occurred.\n", noErrors);
14178       return 1;
14179     }
14180   printf ("  All tests passed successfully.\n");
14182   return 0;
14186  * Local Variables:
14187  * mode:c
14188  * End:
14189  */