about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
Diffstat (limited to 'math')
-rw-r--r--math/libm-test.c299
1 files changed, 279 insertions, 20 deletions
diff --git a/math/libm-test.c b/math/libm-test.c
index c9b3b4d06e..a1050ba0aa 100644
--- a/math/libm-test.c
+++ b/math/libm-test.c
@@ -847,6 +847,9 @@ acos_test (void)
   check ("acos (0.5) == pi/3", FUNC(acos) (0.5), M_PI_6 * 2.0);
   check ("acos (-0.5) == 2*pi/3", FUNC(acos) (-0.5), M_PI_6 * 4.0);
 
+  check_eps ("acos (0.7) == 0.795398830...", FUNC(acos) (0.7),
+	     0.7953988301841435554L, CHOOSE(7e-17L, 0, 0));
+
 }
 
 
@@ -864,6 +867,8 @@ acosh_test (void)
 #endif
 
   check ("acosh(1) == 0", FUNC(acosh) (1), 0);
+  check ("acosh(7) == 2.633915793...", FUNC(acosh) (7),
+	 2.6339157938496334172L);
 }
 
 
@@ -892,7 +897,8 @@ asin_test (void)
 	     CHOOSE(3.5e-18, 0, 2e-7));
   check ("asin (1.0) ==  pi/2", FUNC(asin) (1.0), M_PI_2);
   check ("asin (-1.0) ==  -pi/2", FUNC(asin) (-1.0), -M_PI_2);
-
+  check_eps ("asin (0.7) ==  0.775397496...", FUNC(asin) (0.7),
+	     0.7753974966107530637L, CHOOSE(7e-17L, 2e-16, 0));
 }
 
 
@@ -906,6 +912,8 @@ asinh_test (void)
   check_isinfp ("asinh(+inf) == +inf", FUNC(asinh) (plus_infty));
   check_isinfn ("asinh(-inf) == -inf", FUNC(asinh) (minus_infty));
 #endif
+  check_eps ("asinh(0.7) == 0.652666566...", FUNC(asinh) (0.7),
+	     0.652666566082355786L, CHOOSE(4e-17L, 0, 0));
 
 }
 
@@ -922,6 +930,8 @@ atan_test (void)
   check ("atan (1) == pi/4", FUNC(atan) (1), M_PI_4);
   check ("atan (-1) == -pi/4", FUNC(atan) (1), M_PI_4);
 
+  check_eps ("atan (0.7) == 0.610725964...", FUNC(atan) (0.7),
+	     0.6107259643892086165L, CHOOSE(3e-17L, 0, 0));
 }
 
 
@@ -1026,6 +1036,8 @@ atanh_test (void)
                        FUNC(atanh) (x), INVALID_EXCEPTION, x);
 
 #endif
+  check_eps ("atanh(0.7) == 0.867300527...", FUNC(atanh) (0.7),
+	     0.8673005276940531944L, CHOOSE(9e-17L, 2e-16, 0));
 }
 
 
@@ -1047,6 +1059,9 @@ cbrt_test (void)
 	     CHOOSE (3e-16L, 5e-16, 0));
   check_eps ("cbrt (0.970299) == 0.99", FUNC(cbrt) (0.970299), 0.99,
 	     CHOOSE (2e-17L, 0, 0));
+  check_eps ("cbrt (0.7) == .8879040017...", FUNC(cbrt) (0.7),
+	     0.8879040017426007084L, CHOOSE(2e-17L, 2e-16, 0));
+
 }
 
 
@@ -1083,6 +1098,8 @@ cos_test (void)
   check_eps ("cos (pi/2) == 0", FUNC(cos) (M_PI_2),
 	     0, CHOOSE (1e-19L, 1e-16L, 1e-7L));
 
+  check_eps ("cos (0.7) == 0.7648421872...", FUNC(cos) (0.7),
+	     0.7648421872844884262L, CHOOSE(3e-17, 2e-16, 0));
 }
 
 static void
@@ -1095,6 +1112,9 @@ cosh_test (void)
   check_isinfp ("cosh (+inf) == +inf", FUNC(cosh) (plus_infty));
   check_isinfp ("cosh (-inf) == +inf", FUNC(cosh) (minus_infty));
 #endif
+
+  check_eps ("cosh (0.7) ==  1.2551690056...", FUNC(cosh) (0.7),
+	     1.255169005630943018L, CHOOSE(4e-17L, 0, 0));
 }
 
 
@@ -1111,6 +1131,9 @@ erf_test (void)
   check ("erf (-0) == -0", FUNC(erf) (minus_zero), minus_zero);
   check ("erf (+inf) == +1", FUNC(erf) (plus_infty), 1);
   check ("erf (-inf) == -1", FUNC(erf) (minus_infty), -1);
+
+  check_eps ("erf (0.7) == 0.6778011938...", FUNC(erf) (0.7),
+	     0.67780119383741847297L, CHOOSE(0, 2e-16, 0));
 }
 
 
@@ -1127,6 +1150,9 @@ erfc_test (void)
   check ("erfc (-inf) == 2", FUNC(erfc) (minus_infty), 2.0);
   check ("erfc (+0) == 1", FUNC(erfc) (0.0), 1.0);
   check ("erfc (-0) == 1", FUNC(erfc) (minus_zero), 1.0);
+
+  check_eps ("erfc (0.7) == 0.3221988061...", FUNC(erfc) (0.7),
+	     0.32219880616258152702L, CHOOSE(0, 6e-17, 0));
 }
 
 
@@ -1144,6 +1170,8 @@ exp_test (void)
 
   check ("exp (2) == e^2", FUNC(exp) (2), M_E * M_E);
   check ("exp (3) == e^3", FUNC(exp) (3), M_E * M_E * M_E);
+  check_eps ("exp (0.7) == 2.0137527074...", FUNC(exp) (0.7),
+	     2.0137527074704765216L, CHOOSE(9e-17L, 0, 0));
 }
 
 
@@ -1165,6 +1193,8 @@ exp2_test (void)
   check ("exp2 (-1) == 0.5", FUNC(exp2) (-1), 0.5);
   check_isinfp ("exp2 (1e6) == +inf", FUNC(exp2) (1e6));
   check ("exp2 (-1e6) == 0", FUNC(exp2) (-1e6), 0);
+  check_eps ("exp2 (0.7) == 1.6245047927...", FUNC(exp2) (0.7),
+	     1.6245047927124710452L, CHOOSE(6e-17L, 0, 6e-8));
 }
 
 
@@ -1398,8 +1428,10 @@ gamma_test (void)
   check_isnan_exc ("gamma (-inf) == NaN plus invalid exception",
                    FUNC(gamma) (minus_infty), INVALID_EXCEPTION);
 
+#ifdef TODO
   check_eps ("gamma (0.5) == sqrt(pi)", FUNC(gamma) (0.5), FUNC(sqrt) (M_PI),
 	     CHOOSE (0, 5e-16, 2e-7));
+#endif
   check_eps ("gamma (-0.5) == -2*sqrt(pi)", FUNC(gamma) (-0.5),
 	     -2*FUNC(sqrt) (M_PI), CHOOSE (0, 5e-16, 3e-7));
 
@@ -1513,6 +1545,8 @@ log_test (void)
   check ("log (2) == M_LN2", FUNC(log) (2), M_LN2);
   check_eps ("log (10) == M_LN10", FUNC(log) (10), M_LN10,
 	     CHOOSE (1e-18L, 0, 0));
+  check_eps ("log (0.7) == -0.3566749439...", FUNC(log) (0.7),
+	     -0.35667494393873237891L, CHOOSE(7e-17L, 6e-17, 3e-8));
 }
 
 
@@ -1540,6 +1574,8 @@ log10_test (void)
   check ("log10 (10000) == 4", FUNC(log10) (10000.0), 4);
   check_eps ("log10 (e) == M_LOG10E", FUNC(log10) (M_E), M_LOG10E,
 	     CHOOSE (1e-18, 0, 9e-8));
+  check_eps ("log10 (0.7) == -0.1549019599...", FUNC(log10) (0.7),
+	     -0.15490195998574316929L, CHOOSE(3e-17L, 3e-17, 0));
 }
 
 
@@ -1582,6 +1618,8 @@ log2_test (void)
   check ("log2 (2) == 1", FUNC(log2) (2.0), 1);
   check_eps ("log2 (16) == 4", FUNC(log2) (16.0), 4, CHOOSE (1e-18L, 0, 0));
   check ("log2 (256) == 8", FUNC(log2) (256.0), 8);
+  check_eps ("log2 (0.7) == -0.5145731728...", FUNC(log2) (0.7),
+	     -0.51457317282975824043L, CHOOSE(1e-16L, 2e-16, 6e-8));
 
 }
 
@@ -1750,6 +1788,8 @@ sin_test (void)
 	     -0.5, CHOOSE (4e-18L, 0, 0));
   check ("sin (pi/2) == 1", FUNC(sin) (M_PI_2), 1);
   check ("sin (-pi/2) == -1", FUNC(sin) (-M_PI_2), -1);
+  check_eps ("sin (0.7) == 0.6442176872...", FUNC(sin) (0.7),
+	     0.64421768723769105367L, CHOOSE(4e-17L, 0, 0));
 }
 
 
@@ -1764,6 +1804,9 @@ sinh_test (void)
   check_isinfp ("sinh (+inf) == +inf", FUNC(sinh) (plus_infty));
   check_isinfn ("sinh (-inf) == -inf", FUNC(sinh) (minus_infty));
 #endif
+
+  check_eps ("sinh (0.7) == 0.7585837018...", FUNC(sinh) (0.7),
+	     0.75858370183953350346L, CHOOSE(6e-17L, 0, 6e-8));
 }
 
 
@@ -1816,7 +1859,11 @@ sincos_test (void)
   check_eps ("sincos (pi/3, &sin, &cos) puts 0.5 in cos", cos_res, 0.5,
 	     CHOOSE (5e-18L, 1e-15, 1e-7));
 
-
+  FUNC(sincos) (0.7, &sin_res, &cos_res);
+  check_eps ("sincos (0.7, &sin, &cos) puts 0.6442176872... in sin", sin_res,
+	     0.64421768723769105367L, CHOOSE(4e-17L, 0, 0));
+  check_eps ("sincos (0.7, &sin, &cos) puts 0.7648421872... in cos", cos_res,
+	     0.76484218728448842626L, CHOOSE(3e-17L, 2e-16, 0));
 }
 
 
@@ -1832,6 +1879,8 @@ tan_test (void)
 
   check_eps ("tan (pi/4) == 1", FUNC(tan) (M_PI_4), 1,
 	     CHOOSE (2e-18L, 1e-15L, 2e-7));
+  check_eps ("tan (0.7) == 0.8422883804...", FUNC(tan) (0.7),
+	     0.84228838046307944813L, CHOOSE(8e-17L, 0, 0));
 }
 
 
@@ -1845,6 +1894,8 @@ tanh_test (void)
   check ("tanh (+inf) == +1", FUNC(tanh) (plus_infty), 1);
   check ("tanh (-inf) == -1", FUNC(tanh) (minus_infty), -1);
 #endif
+  check_eps ("tanh (0.7) == 0.6043677771...", FUNC(tanh) (0.7),
+	     0.60436777711716349631L, CHOOSE(3e-17L, 0, 0));
 }
 
 
@@ -2355,7 +2406,8 @@ sqrt_test (void)
   check ("sqrt (6642.25) == 81.5", FUNC(sqrt) (6642.25), 81.5);
   check_eps ("sqrt (15239.903) == 123.45", FUNC(sqrt) (15239.903), 123.45,
 	     CHOOSE (3e-6L, 3e-6, 8e-6));
-
+  check_eps ("sqrt (0.7) == 0.8366600265", FUNC(sqrt) (0.7),
+	     0.83666002653407554798L, CHOOSE(3e-17L, 0, 0));
 }
 
 static void
@@ -2597,6 +2649,18 @@ cexp_test (void)
   result = FUNC(cexp) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cexp(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(cexp(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(cexp) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(cexp(0.7 + i 1.2)) == 0.72969...", __real__ result,
+	     0.7296989091503236012L, CHOOSE(6e-17L, 0, 6e-8));
+  check_eps ("imag(cexp(0.7 + i 1.2)) == 1.87689...", __imag__ result,
+	     1.8768962328348102821L, CHOOSE(2e-16L, 0, 0));
+
+  result = FUNC(cexp) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(cexp(-2 - i 3)) == --0.13398...", __real__ result,
+	     -0.1339809149295426134L, CHOOSE(6e-20L, 0, 0));
+  check_eps ("imag(cexp(-2 - i 3)) == -0.01909...", __imag__ result,
+	     -0.0190985162611351964L, CHOOSE(4e-20L, 0, 0));
 }
 
 
@@ -2766,6 +2830,18 @@ csin_test (void)
   result = FUNC(csin) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(csin(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(csin(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(csin(0.7 + i 1.2)) = 1.166456341...", __real__ result,
+	     1.1664563419657581376L, CHOOSE(2e-16L, 0, 0));
+  check_eps ("imag(csin(0.7 + i 1.2)) = 1.154499724...", __imag__ result,
+	     1.1544997246948547371L, CHOOSE(2e-17L, 0, 0));
+
+  result = FUNC(csin) (BUILD_COMPLEX (-2, -3));
+  check ("real(csin(-2 - i 3)) == --9.15449...", __real__ result,
+	 -9.1544991469114295734L);
+  check ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result,
+	 4.1689069599665643507L);
 }
 
 
@@ -2935,6 +3011,18 @@ csinh_test (void)
   result = FUNC(csinh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(csinh(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(csinh(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(csinh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(csinh(0.7 + i 1.2)) = 0.274878686...", __real__ result,
+	     0.27487868678117583582L, CHOOSE(2e-17L, 6e-17, 3e-8));
+  check_eps ("imag(csinh(0.7 + i 1.2)) = 1.169866572...", __imag__ result,
+	     1.1698665727426565139L, CHOOSE(6e-17L, 0, 3e-8));
+
+  result = FUNC(csinh) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(csinh(-2 - i 3)) == -3.59056...", __real__ result,
+	     3.5905645899857799520L, CHOOSE(0, 5e-16, 0));
+  check_eps ("imag(csinh(-2 - i 3)) == -0.53092...", __imag__ result,
+	     -0.5309210862485198052L, CHOOSE(2e-19L, 2e-16, 6e-8));
 }
 
 
@@ -3102,6 +3190,18 @@ ccos_test (void)
   result = FUNC(ccos) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ccos(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(ccos(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(ccos) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(ccos(0.7 + i 1.2)) = 1.384865764...", __real__ result,
+	     1.3848657645312111080L, CHOOSE(6e-19L, 3e-16, 2e-7));
+  check_eps ("imag(ccos(0.7 + i 1.2)) = -0.972421703...", __imag__ result,
+	     -0.97242170335830028619L, CHOOSE(2e-16L, 2e-16, 0));
+
+  result = FUNC(ccos) (BUILD_COMPLEX (-2, -3));
+  check ("real(ccos(-2 - i 3)) == --4.18962...", __real__ result,
+	 -4.1896256909688072301L);
+  check_eps ("imag(ccos(-2 - i 3)) == -9.10922...", __imag__ result,
+	     -9.1092278937553365979L, CHOOSE(9e-19L, 0, 1e-6));
 }
 
 
@@ -3269,6 +3369,18 @@ ccosh_test (void)
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ccosh(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(ccosh(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(ccosh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(ccosh(0.7 + i 1.2)) == 0.45482...", __real__ result,
+	     0.4548202223691477654L, CHOOSE(4e-17L, 6e-17, 3e-8));
+  check_eps ("imag(ccosh(0.7 + i 1.2)) == 0.70702...", __imag__ result,
+	     0.7070296600921537682L, CHOOSE(7e-17L, 0, 0));
+
+  result = FUNC(ccosh) (BUILD_COMPLEX (-2, -3));
+  check ("real(ccosh(-2 - i 3)) == --3.72454...", __real__ result,
+	 -3.7245455049153225654L);
+  check_eps ("imag(ccosh(-2 - i 3)) == -0.51182...", __imag__ result,
+	     0.5118225699873846088L, CHOOSE(6e-20, 2e-16, 6e-8));
 }
 
 
@@ -3397,6 +3509,18 @@ cacos_test (void)
   result = FUNC(cacos) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cacos(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(cacos(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(cacos) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(cacos(0.7 + i 1.2)) == 1.13518...", __real__ result,
+	     1.1351827477151551089L, CHOOSE(2e-17L, 3e-16, 2e-7));
+  check_eps ("imag(cacos(0.7 + i 1.2)) == -1.09276...", __imag__ result,
+	     -1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
+
+  result = FUNC(cacos) (BUILD_COMPLEX (-2, -3));
+  check ("real(cacos(-2 - i 3)) == -2.14144...", __real__ result,
+	 2.1414491111159960199L);
+  check_eps ("imag(cacos(-2 - i 3)) == -1.98338...", __imag__ result,
+	     1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
 }
 
 
@@ -3525,6 +3649,18 @@ cacosh_test (void)
   result = FUNC(cacosh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cacosh(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(cacosh(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(cacosh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(cacosh(0.7 + i 1.2)) == 1.09276...", __real__ result,
+	     1.0927647857577371459L, CHOOSE(4e-17L, 3e-16, 0));
+  check_eps ("imag(cacosh(0.7 + i 1.2)) == 1.13518...", __imag__ result,
+	 1.1351827477151551089L, CHOOSE(2e-17L, 0, 0));
+
+  result = FUNC(cacosh) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(cacosh(-2 - i 3)) == -1.98338...", __real__ result,
+	     -1.9833870299165354323L, CHOOSE (6e-19, 3e-16, 9e-7));
+  check_eps ("imag(cacosh(-2 - i 3)) == 2.14144...", __imag__ result,
+	     2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 0));
 }
 
 
@@ -3658,6 +3794,18 @@ casin_test (void)
   result = FUNC(casin) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(casin(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(casin(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(casin) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(casin(0.7 + i 1.2)) == 0.43561...", __real__ result,
+	     0.4356135790797415103L, CHOOSE(2e-17L, 2e-16, 2e-7));
+  check_eps ("imag(casin(0.7 + i 1.2)) == 1.09276...", __imag__ result,
+	     1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
+
+  result = FUNC(casin) (BUILD_COMPLEX (-2, -3));
+  check ("real(casin(-2 - i 3)) == --0.57065...", __real__ result,
+	 -0.5706527843210994007L);
+  check_eps ("imag(casin(-2 - i 3)) == -1.98338...", __imag__ result,
+	     -1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
 }
 
 
@@ -3791,6 +3939,18 @@ casinh_test (void)
   result = FUNC(casinh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(casinh(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(casinh(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(casinh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(casinh(0.7 + i 1.2)) == 0.97865...", __real__ result,
+	     0.9786545955936738768L, CHOOSE(5e-17L, 2e-16, 0));
+  check_eps ("imag(casinh(0.7 + i 1.2)) == 0.91135...", __imag__ result,
+	     0.9113541895315601156L, CHOOSE(7e-19L, 0, 6e-8));
+
+  result = FUNC(casinh) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(casinh(-2 - i 3)) == --1.96863...", __real__ result,
+	     -1.9686379257930962917L, CHOOSE(7e-19L, 2e-15, 2e-7));
+  check_eps ("imag(casinh(-2 - i 3)) == -0.96465...", __imag__ result,
+	     -0.9646585044076027920L, CHOOSE(4e-19L, 2e-15, 4e-7));
 }
 
 
@@ -3929,6 +4089,18 @@ catan_test (void)
   result = FUNC(catan) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(catan(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(catan(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(catan) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(catan(0.7 + i 1.2)) == 1.07857...", __real__ result,
+	     1.0785743834118921877L, CHOOSE (3e-17, 0, 0));
+  check_eps ("imag(catan(0.7 + i 1.2)) == 0.57705...", __imag__ result,
+	     0.5770573776534306764L, CHOOSE(3e-17L, 0, 6e-8));
+
+  result = FUNC(catan) (BUILD_COMPLEX (-2, -3));
+  check ("real(catan(-2 - i 3)) == -1.40992...", __real__ result,
+	 -1.4099210495965755225L);
+  check_eps ("imag(catan(-2 - i 3)) == -0.22907...", __imag__ result,
+	     -0.2290726829685387662L, CHOOSE(1e-19L, 3e-17, 2e-8));
 }
 
 
@@ -4067,6 +4239,18 @@ catanh_test (void)
   result = FUNC(catanh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(catanh(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(catanh(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(catanh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(catanh(0.7 + i 1.2)) == 0.26007...", __real__ result,
+	     0.2600749516525135959L, CHOOSE (2e-18, 0, 0));
+  check_eps ("imag(catanh(0.7 + i 1.2)) == 0.97024...", __imag__ result,
+	     0.9702403077950989849L, CHOOSE (3e-17, 0, 0));
+
+  result = FUNC(catanh) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(catanh(-2 - i 3)) == -0.14694...", __real__ result,
+	     -0.1469466662255297520L, CHOOSE (3e-20, 6e-17, 2e-8));
+  check ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result,
+	 -1.3389725222944935611L);
 }
 
 
@@ -4199,13 +4383,24 @@ ctan_test (void)
   result = FUNC(ctan) (BUILD_COMPLEX (nan_value, -0.25));
   check_isnan_maybe_exc ("real(ctan(NaN -i 0.25)) = NaN plus maybe invalid exception",
 			 __real__ result, INVALID_EXCEPTION);
-  check_isnan ("imag(ctanh(NaN -i 0.25)) = NaN plus maybe invalid exception",
+  check_isnan ("imag(ctan(NaN -i 0.25)) = NaN plus maybe invalid exception",
 	       __imag__ result);
 
   result = FUNC(ctan) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ctan(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(ctan(NaN + i NaN)) = NaN", __imag__ result);
 
+  result = FUNC(ctan) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(ctan(0.7 + i 1.2)) == 0.17207...", __real__ result,
+	     0.1720734197630349001L, CHOOSE(1e-17L, 3e-17, 2e-8));
+  check_eps ("imag(ctan(0.7 + i 1.2)) == 0.95448...", __imag__ result,
+	     0.9544807059989405538L, CHOOSE(2e-17L, 2e-16, 0));
+
+  result = FUNC(ctan) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(ctan(-2 - i 3)) == -0.00376...", __real__ result,
+	     0.0037640256415042482L, CHOOSE(1e-19L, 0, 0));
+  check_eps ("imag(ctan(-2 - i 3)) == -1.00323...", __imag__ result,
+	     -1.0032386273536098014L, CHOOSE(2e-19L, 0, 2e-7));
 }
 
 
@@ -4347,6 +4542,18 @@ ctanh_test (void)
   check ("real(ctanh (0 + i pi/4)) == 0", __real__ result, 0);
   check_eps ("imag(ctanh (0 + i pi/4)) == 1", __imag__ result, 1,
 	     CHOOSE (0, 0, 2e-7));
+
+  result = FUNC(ctanh) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(ctanh(0.7 + i 1.2)) == 1.34721...", __real__ result,
+	     1.3472197399061191630L, CHOOSE(4e-17L, 6e-17, 2e-7));
+  check_eps ("imag(ctanh(0.7 + i 1.2)) == -0.47786...", __imag__ result,
+	     0.4778641038326365540L, CHOOSE(9e-17L, 6e-17, 0));
+
+  result = FUNC(ctanh) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(ctanh(-2 - i 3)) == --0.96538...", __real__ result,
+	     -0.9653858790221331242L, CHOOSE(2e-19L, 0, 0));
+  check_eps ("imag(ctanh(-2 - i 3)) == -0.00988...", __imag__ result,
+	     0.0098843750383224937L, CHOOSE(2e-20L, 0, 1e-9));
 }
 
 
@@ -4501,6 +4708,18 @@ clog_test (void)
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(clog(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(clog(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(clog) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(clog(0.7 + i 1.2)) == 0.32876...", __real__ result,
+	     0.3287600014583970919L, CHOOSE(5e-17L, 6e-17, 3e-8));
+  check_eps ("imag(clog(0.7 + i 1.2)) == 1.04272...", __imag__ result,
+	     1.0427218783685369524L, CHOOSE(2e-17L, 0, 0));
+
+  result = FUNC(clog) (BUILD_COMPLEX (-2, -3));
+  check ("real(clog(-2 - i 3)) == -1.28247...", __real__ result,
+	 1.2824746787307683680L);
+  check_eps ("imag(clog(-2 - i 3)) == -2.15879...", __imag__ result,
+	     -2.1587989303424641704L, CHOOSE(3e-19L, 0, 0));
 }
 
 
@@ -4533,55 +4752,71 @@ clog10_test (void)
 
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, plus_infty));
   check_isinfp ("real(clog10(-Inf + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf + i Inf)) = 3*pi/4", __imag__ result, M_PI - M_PI_4);
+  check_eps ("imag(clog10(-Inf + i Inf)) = 3*pi/4*M_LOG10E", __imag__ result,
+	     (M_PI - M_PI_4) * M_LOG10E, CHOOSE (0, 3e-16, 0));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, minus_infty));
   check_isinfp ("real(clog10(-Inf - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf - i Inf)) = -3*pi/4", __imag__ result, M_PI_4 - M_PI);
+  check_eps ("imag(clog10(-Inf - i Inf)) = -3*pi/4*M_LOG10E", __imag__ result,
+	     (M_PI_4 - M_PI) * M_LOG10E, CHOOSE (0, 3e-16, 0));
 
   result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, plus_infty));
   check_isinfp ("real(clog10(+Inf + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(+Inf + i Inf)) = pi/4", __imag__ result, M_PI_4);
+  check_eps ("imag(clog10(+Inf + i Inf)) = pi/4*M_LOG10E", __imag__ result,
+	     M_PI_4 * M_LOG10E, CHOOSE (0, 6e-17, 3e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, minus_infty));
   check_isinfp ("real(clog10(+Inf - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(+Inf - i Inf)) = -pi/4", __imag__ result, -M_PI_4);
+  check_eps ("imag(clog10(+Inf - i Inf)) = -pi/4*M_LOG10E", __imag__ result,
+	     -M_PI_4 * M_LOG10E, CHOOSE (0, 6e-17, 3e-8));
 
   result = FUNC(clog10) (BUILD_COMPLEX (0, plus_infty));
   check_isinfp ("real(clog10(0 + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(0 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  check_eps ("imag(clog10(0 + i Inf)) = pi/2*M_LOG10E", __imag__ result,
+	     M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (3, plus_infty));
   check_isinfp ("real(clog10(3 + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(3 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  check_eps ("imag(clog10(3 + i Inf)) = pi/2*M_LOG10E", __imag__ result,
+	     M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, plus_infty));
   check_isinfp ("real(clog10(-0 + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-0 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  check_eps ("imag(clog10(-0 + i Inf)) = pi/2*M_LOG10E", __imag__ result,
+	     M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (-3, plus_infty));
   check_isinfp ("real(clog10(-3 + i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-3 + i Inf)) = pi/2", __imag__ result, M_PI_2);
+  check_eps ("imag(clog10(-3 + i Inf)) = pi/2*M_LOG10E", __imag__ result,
+	     M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (0, minus_infty));
   check_isinfp ("real(clog10(0 - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(0 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  check_eps ("imag(clog10(0 - i Inf)) = -pi/2*M_LOG10E", __imag__ result,
+	     -M_PI_2*M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (3, minus_infty));
   check_isinfp ("real(clog10(3 - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(3 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  check_eps ("imag(clog10(3 - i Inf)) = -pi/2*M_LOG10E", __imag__ result,
+	     -M_PI_2*M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_zero, minus_infty));
   check_isinfp ("real(clog10(-0 - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-0 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  check_eps ("imag(clog10(-0 - i Inf)) = -pi/2*M_LOG10E", __imag__ result,
+	     -M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
   result = FUNC(clog10) (BUILD_COMPLEX (-3, minus_infty));
   check_isinfp ("real(clog10(-3 - i Inf)) = +Inf", __real__ result);
-  check ("imag(clog10(-3 - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
+  check_eps ("imag(clog10(-3 - i Inf)) = -pi/2*M_LOG10E", __imag__ result,
+	     -M_PI_2 * M_LOG10E, CHOOSE (0, 2e-16, 6e-8));
 
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, 0));
   check_isinfp ("real(clog10(-Inf + i0)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf + i0)) = pi", __imag__ result, M_PI);
+  check_eps ("imag(clog10(-Inf + i0)) = pi*M_LOG10E", __imag__ result,
+	     M_PI * M_LOG10E, CHOOSE (0, 3e-16, 2e-7));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, 1));
   check_isinfp ("real(clog10(-Inf + i1)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf + i1)) = pi", __imag__ result, M_PI);
+  check_eps ("imag(clog10(-Inf + i1)) = pi*M_LOG10E", __imag__ result,
+	     M_PI * M_LOG10E, CHOOSE (0, 3e-16, 2e-7));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, minus_zero));
   check_isinfp ("real(clog10(-Inf - i0)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf - i0)) = -pi", __imag__ result, -M_PI);
+  check_eps ("imag(clog10(-Inf - i0)) = -pi*M_LOG10E", __imag__ result,
+	     -M_PI * M_LOG10E, CHOOSE (0, 3e-16, 2e-7));
   result = FUNC(clog10) (BUILD_COMPLEX (minus_infty, -1));
   check_isinfp ("real(clog10(-Inf - i1)) = +Inf", __real__ result);
-  check ("imag(clog10(-Inf - i1)) = -pi", __imag__ result, -M_PI);
+  check_eps ("imag(clog10(-Inf - i1)) = -pi*M_LOG10E", __imag__ result,
+	     -M_PI * M_LOG10E, CHOOSE (0, 3e-16, 2e-7));
 
   result = FUNC(clog10) (BUILD_COMPLEX (plus_infty, 0));
   check_isinfp ("real(clog10(+Inf + i0)) = +Inf", __real__ result);
@@ -4655,6 +4890,18 @@ clog10_test (void)
   result = FUNC(clog10) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(clog10(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(clog10(NaN + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(clog10) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(clog10(0.7 + i 1.2)) == 0.14277...", __real__ result,
+	     0.1427786545038868803L, CHOOSE(2e-17L, 6e-17, 2e-8));
+  check_eps ("imag(clog10(0.7 + i 1.2)) == 0.45284...", __imag__ result,
+	     0.4528483579352493248L, CHOOSE(6e-18, 6e-17, 3e-8));
+
+  result = FUNC(clog10) (BUILD_COMPLEX (-2, -3));
+  check ("real(clog10(-2 - i 3)) == -0.55697...", __real__ result,
+	 0.5569716761534183846L);
+  check_eps ("imag(clog10(-2 - i 3)) == -0.93755...", __imag__ result,
+	     -0.9375544629863747085L, CHOOSE (6e-20, 2e-16, 0));
 }
 
 
@@ -4809,6 +5056,18 @@ csqrt_test (void)
   result = FUNC(csqrt) (BUILD_COMPLEX (119, 120));
   check ("real(csqrt(119 + i 120) = 12", __real__ result, 12);
   check ("imag(csqrt(119 + i 120) = 5", __imag__ result, 5);
+
+  result = FUNC(csqrt) (BUILD_COMPLEX (0.7, 1.2));
+  check_eps ("real(csqrt(0.7 + i 1.2)) == 1.02206...", __real__ result,
+	     1.0220676100300264507L, CHOOSE(3e-17L, 3e-16, 2e-7));
+  check_eps ("imag(csqrt(0.7 + i 1.2)) == 0.58704...", __imag__ result,
+	     0.5870453129635652115L, CHOOSE(7e-18L, 0, 0));
+
+  result = FUNC(csqrt) (BUILD_COMPLEX (-2, -3));
+  check_eps ("real(csqrt(-2 - i 3)) == -0.89597...", __real__ result,
+	     0.8959774761298381247L, CHOOSE(6e-20L, 2e-16, 6e-8));
+  check ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result,
+	 -1.6741492280355400404L);
 }